题目链接:
https://leetcode-cn.com/problems/to-lower-case/
解题思路1:
使用语言自带的API
class Solution {
public String toLowerCase(String s) {
return s.toLowerCase();
//return s.toUpperCase();
}
}
解题思路2:
- 大写字母 A~Z 的 ASCII 码范围为 [65, 90]
小写字母 a~z 的 ASCII 码范围为 [97, 122] - 如果ch的 ASCII 码在 [65, 90] 的范围内, 那么我们将它的 ASCII 码增加 32 , 即可得到对应的小写字母
- 32 对应的二进制表示为 [00
1
00000]
[65, 96] 对应的二进制表示为 [(010
00001), (010
11010)], 在 [65, 96] 这个区间的所有数表示 32 的那个二进制都是 0(即对应上述标红的三个数字位置)
- 65 + 32 = 01
0
00001 + 001
00000 = 011
00001
而二进制中的 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
相关文章
暂无评论...