题目描述:
实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。
示例 1:
输入: “Hello”
输出: “hello”
示例 2:
输入: “here”
输出: “here”
示例 3:
输入: “LOVELY”
输出: “lovely”
解题过程:
直接得出:
class Solution:
def toLowerCase(self, str: str) -> str:
return str.lower()
然而直接使用函数,这么做虽然快但是学不到东西啊,再说时间和空间复杂度也较高。于是翻评论区发现大家都是用ACSII码解的题,python3另解如下:
class Solution:
def toLowerCase(self, str: str) -> str:
new_ch_list=[]
for ch in str:
if 65<=ord(ch)<97:
new_ch_list.append(chr(ord(ch)+32))
else:
new_ch_list.append(ch)
return "".join(new_ch_list)
此处首先创建了一个新列表;然后遍历整个字符串,使用if和else指令通过ACSII码大小判断各个字符大小写;接着变化大写字符ASCII码+32为小写字符,添加入列表;最后使用join指令连接起列表,使之返回新的字符串。
第二个解法虽然复杂一点点,但还是减少了一丢丢计算机的时间复杂度~
总结:
- 大写字母A-Z对应ASCII码为65-90,小写字母a-z对应ASCII码为97-122,它们之间差了32;
- 往ord()传入一个字符,它返回一个对应的10进制ASCII码;往chr()传入一个10进制或者16进制数字,它返回一个对应ASCII码的字符;
- join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串,可以传入序列或者元组,另解中的""表示不用任何连接符;
- 有些问题看似很简单,但是深究起来内部大有门道,一题多解并且对比算法之间的差异,是我们理解算法甚至计算机科学的有效途径!