Java大写字母转换成小写字母(小转大、与或异或运算)

2年前 (2022) 程序员胖胖胖虎阿
176 0 0

题目链接:

https://leetcode-cn.com/problems/to-lower-case/
Java大写字母转换成小写字母(小转大、与或异或运算)

解题思路1:
使用语言自带的API

class Solution {
    public String toLowerCase(String s) {
        return s.toLowerCase();
        //return s.toUpperCase();
    }
}

解题思路2:

  1. 大写字母 A~Z 的 ASCII 码范围为 [65, 90]
    小写字母 a~z 的 ASCII 码范围为 [97, 122]
  2. 如果ch的 ASCII 码在 [65, 90] 的范围内, 那么我们将它的 ASCII 码增加 32 , 即可得到对应的小写字母
  3. 32 对应的二进制表示为 [00100000]
    [65, 96] 对应的二进制表示为 [(01000001), (01011010)], 在 [65, 96] 这个区间的所有数表示 32 的那个二进制都是 0 (即对应上述标红的三个数字位置)
  4. 65 + 32 = 01000001 + 00100000 = 01100001
    而二进制中的 0 + 1 在按位或运算中可以得到 1
    因此可以对 ch 的 ASCII 码与 32 做按位或运算,替代 ch 与 32 的加法运算
class Solution {
    public String toLowerCase(String s) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length(); ++i) {
            char ch = s.charAt(i);
            if (ch >= 65 && ch <= 90) {
                ch |= 32;
            }
            sb.append(ch);
        }
        return sb.toString();
    }
}

与、或、异或运算知识

  • 大变小,小变大( 大写变小写、小写变大写 ) : 字符 ^= 32
  • 大变小 (大写变小写、小写变小写 ): 字符 |= 32
  • 小变大 (小写变大写、大写变大写 ): 字符 &= -33

相关文章

暂无评论

暂无评论...