转换成小写字母

解题思路:

  1. 观察小写字母和大写字母的 ASCII 码:

    • 大写字母 A - Z 的 ASCII 码范围为 [65, 90];
    • 小写字母 a - z 的 ASCII 码范围为 [97, 122];
  2. 小写字母会比大写字母大 32,则直接判断是否当前字母是否在 [65, 90] 区间,在此区间直接加 32 变成小写;

  3. [65,96] 对应的二进制表示为 [(01000001)2, (01011010)2]:

    • 65 的二进制为(1000001)2,32 对应的二进制表示为 (100000)2,异或之后变成 (1100001)2 十进制为 97;
    • 因此可以对 ch 的 ASCII 码与 32 做按位或运算,替代与 32 的加法运算;

复杂度:

  1. 时间复杂度:O(n),其中 n 是字符串 s 的长度;

  2. 空间复杂度:O(1),不考虑返回值的空间占用;

代码实现:

var toLowerCase = function (s) {
  const res = [];

  for (let ch of s) {
    // 返回字符的 Unicode 编码
    if (ch.charCodeAt() >= 65 && ch.charCodeAt() <= 90) {
      // 将 Unicode 编码转为一个字符
      ch = String.fromCharCode(ch.charCodeAt() | 32);
    }
    res.push(ch);
  }

  return res.join('');
};
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 转换成小写字母
  2. 2. 解题思路:
  3. 3. 复杂度:
  4. 4. 代码实现: