算法小技巧:大小写转换
在刷算法或者日常编码的过程中,经常会遇到英文字母的大小写转的问题,一般都是先判断一个字母的ASCII码值是在65-90之间还是在91-122之间,随后在调用toLowerCase()函数和toUpperCase()函数进行转换,我们称其为函数法,就像这样(Java):
这样只转换一次还好,如果次数多的话,(比如LeetCode 784.字母大小写全排列) 。
为了防止代码变得臃肿不堪,我们可以采用二进制的方式,无需判断就可以进行转换,这个叫它二进制法,就像这样:
这样使代码更简洁明了,那原理是什么?
因为大小写字母在 ASCII 表中相差 32 位(即 1 << 5),
我们所以只需要将他们的二进制数的第 6 位 0 变 1,1 变 0 即可。
例如 A = 65 = 0100 0001,a = 97 = 0110 0001,可以看到他们只有第 6 位不同。
而 0 变 1,1 变 0 可以用「异或 1 」来实现。即0 ^ 1 = 1,1 ^ 1 = 0。
所以,无需判断其原来是大写还是小写就能实现大写变小写、小写变大写,
且适用于所有编程语言。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
