转换成小写字母

269 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述

  • 给你一个字符串 s ,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。
  • 示例 1:
    • 输入: s = "Hello"
    • 输出: "hello"
  • 示例 2:
    • 输入: s = "here"
    • 输出: "here"
  • 示例 3
    • 输入: s = "LOVELY"
    • 输出: "lovely"
  • 提示
    • 1 <= s.length <= 100
    • s 由 ASCII 字符集中的可打印字符组成

二、思路分析:

  • 大写字母转小写字母,首先toLowerCase方法,和toLocaleLowerCase方法,这个应该都知道,至于它们两个方法的区别,可以自行百度。
    • 一行代码搞定,但是题目是简单题目,你这么做也太敷衍了吧
  • 然后想一下如果没有提供这两个方法呢,要怎么实现?
    • 通过字符串的charCodeAt方法和fromCharCode方法配合ASCII码实现,不知道以上的toLowerCase是不是这样实现的
    • 首先将给定的字符串转化为数组形式
    • 然后遍历数组,把每一项的字符的ASCII码解出来,判断是不是大写字母
    • 大写字母的ASCII范围为65 - 90对应大写字母A - Z
    • 小写字母的ASCII范围为97 - 122对应小写字母a - z
    • 然后同一字母的大小写的ASCII值相差32,如果当前字母是大写字母,就把它的ASCII加上32就是其小写字母的ASCII
    • 在通过字符串方法fromCharCodeASCII转化成对应的字符
    • 最后将数组拼接返回

三、AC 代码:

  • 第一种:利用封装方法
function toLowerCase(s: string): string {
    return s.toLowerCase();
};
  • 第二种:
function toLowerCase(s: string): string {
    let sArr = s.split('');
    for(let i = 0; i < sArr.length; i++){
        if(sArr[i].charCodeAt(0) <= 90 && sArr[i].charCodeAt(0) >= 65){
            sArr[i] = String.fromCharCode(sArr[i].charCodeAt(0) + 32);
        }
    }
    return sArr.join('');
};

四、总结:

  • 题目其实还是比较简单的,注意下测试用例除了包含26个字母外,还包含符号,所以不用封装方法时,判断条件要确定区间
  • 更多解题方式,移步题解区
  • 自己写的方法和用封装好的方法时间和内存消耗上差不太多,但是现实项目中有轮子还是用轮子吧,节省时间和代码量

image.png