Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述
- 给你一个字符串
s,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。 - 示例 1:
- 输入: s = "Hello"
- 输出: "hello"
- 示例 2:
- 输入: s = "here"
- 输出: "here"
- 示例 3
- 输入: s = "LOVELY"
- 输出: "lovely"
- 提示
1 <= s.length <= 100s由 ASCII 字符集中的可打印字符组成
二、思路分析:
- 大写字母转小写字母,首先
toLowerCase方法,和toLocaleLowerCase方法,这个应该都知道,至于它们两个方法的区别,可以自行百度。- 一行代码搞定,但是题目是简单题目,你这么做也太敷衍了吧
- 然后想一下如果没有提供这两个方法呢,要怎么实现?
- 通过字符串的
charCodeAt方法和fromCharCode方法配合ASCII码实现,不知道以上的toLowerCase是不是这样实现的 - 首先将给定的字符串转化为数组形式
- 然后遍历数组,把每一项的字符的
ASCII码解出来,判断是不是大写字母 - 大写字母的
ASCII范围为65 - 90对应大写字母A - Z - 小写字母的
ASCII范围为97 - 122对应小写字母a - z - 然后同一字母的大小写的
ASCII值相差32,如果当前字母是大写字母,就把它的ASCII加上32就是其小写字母的ASCII - 在通过字符串方法
fromCharCode将ASCII转化成对应的字符 - 最后将数组拼接返回
- 通过字符串的
三、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个字母外,还包含符号,所以不用封装方法时,判断条件要确定区间 - 更多解题方式,移步题解区
- 自己写的方法和用封装好的方法时间和内存消耗上差不太多,但是现实项目中有轮子还是用轮子吧,节省时间和代码量