python leetcode刷题 (2):709.转换成小写字母

题目描述:

实现函数 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指令连接起列表,使之返回新的字符串。
第二个解法虽然复杂一点点,但还是减少了一丢丢计算机的时间复杂度~

总结:

  1. 大写字母A-Z对应ASCII码为65-90,小写字母a-z对应ASCII码为97-122,它们之间差了32;
  2. 往ord()传入一个字符,它返回一个对应的10进制ASCII码;往chr()传入一个10进制或者16进制数字,它返回一个对应ASCII码的字符;
  3. join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串,可以传入序列或者元组,另解中的""表示不用任何连接符;
  4. 有些问题看似很简单,但是深究起来内部大有门道,一题多解并且对比算法之间的差异,是我们理解算法甚至计算机科学的有效途径!

猜你喜欢

转载自blog.csdn.net/weixin_42785446/article/details/88992258