LeetCode每日一题(2020.10.17) 709. 转换成小写字母

LeetCode每日一题(2020.10.17) 

最难做的事,就是把容易做的事持之以恒。

今日题目:

709. 转换成小写字母

 难度:简单

实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。

示例 1:

输入: "Hello"
输出: "hello"


示例 2:

输入: "here"
输出: "here"

通过次数55,081,提交次数72,621

看到这个题目的时候,最先想到的是直接用Python的内置函数upper(),来实现,当然这是最简单的方法。

解法一:

class Solution:
    def toLowerCase(self, str: str) -> str:
        return str.lower()

下面来看下执行时间和内存消耗:

当然这个方法显然不符合题目的要求,题目要去自己写程序实现这个功能。

所以我们可以采用ASSIC码转化的方式实现该功能。A-Z的ASSIC码为65-90,a-z的ASSIC码为87-122,二者相差了32,故我们只需要取出字符串的每一个字符,然后一次判断是否其位于65-90之间,如果满足的话,就将其ASSIC码加32,然后再将ASSIC码转化为对应的字符即可。

这里,我们需要用到两个函数,一个是ord(),这个函数可以获得字符的ASSIC码,还有一个是chr(),这个函数可以将ASSIC码转化为对应的字符

解法二:

class Solution:
    def toLowerCase(self, str: str) -> str:
        s = []
        for i in str:
            if  65 <= ord(i) <= 90:
                s.append(chr(ord(i) + 32))
            else:
                s.append(i)
        return ''.join(s)

下面来看下执行时间和内存消耗:

还有一种用字典的方式,先建立好大小写字母的对应关系,然后取出字符串的每一个字符,然后比较该字符是否在字典的键中,如果在的话,就在元组s的尾部插入该键的值,否则的话,直接插入原来的字符。简单的来说,就是如果该字母是大写,就用小写字母代替它,否则就不需要代替。最后用join()方法,将元组中的元素连接起来

下面,介绍一些上面提到的get()方法得语法:

dict.get(key, default=None)        key -- 字典中要查找的键。    default -- 如果指定键的值不存在时,返回该默认值。

class Solution:
    def toLowerCase(self, str: str) -> str:
        dic = {'A':'a', 'B':'b', 'C':'c', 'D':'d', 'E':'e', 'F':'f',
               'G':'g', 'H':'h', 'I':'i', 'J':'j', 'K':'k', 'L':'l',
               'M':'m', 'N':'n', 'O':'o','P':'p', 'Q':'q', 'R':'r',
               'S':'s', 'T':'t', 'U':'u', 'V':'v', 'W':'w', 'X':'x',
               'Y':'y', 'Z':'z'}
        s = []
        for i in str:
            if dic.get(i):
                s.append(dic[i])
            else:
                s.append(i)
        return ''.join(s)

下面来看下执行时间和内存消耗:

可以看出,采用字典的方法,虽然会牺牲一些内存消耗,但是,执行时间会有相当的缩减,由此可见对于即时要求性较高的程序,采用字典的方式不失为一种良策。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/to-lower-case
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值