今天刷力扣709时遇到的,记录大佬的思路
- 大写字母 A - Z 的 ASCII 码范围为 [65,90]
- 小写字母 a - z 的 ASCII 码范围为 [97,122]
很容易看出上下两个域相差32。
由于[65,90]中任一字符ch对应的二进制表示为
[
(
01000001
)
2
,
(
01011010
)
2
]
[(01000001)_2, (01011010)_2]
[(01000001)2,(01011010)2],
又因为32这个数字对应的二进制表示为
(
00100000
)
2
(00100000)_2
(00100000)2,
而对于
[
(
01000001
)
2
,
(
01011010
)
2
]
[(01000001)_2,(01011010)_2]
[(01000001)2,(01011010)2]内的所有数,表示32的那个二进制位都是0,
因此可以对ch 的 ASCII 码与32
(
00100000
)
2
(00100000)_2
(00100000)2做按位或运算,替代与32的加法运算。
其他位运算:
- 全转小写:ch|=32
- 全转大写:ch&=-33 (原理是32的补码(原码取反+1)再-1)
- 大小写对换(大写变小写,小写变大):ch^=32