算法小技巧:大小写转换

在刷算法或者日常编码的过程中,经常会遇到英文字母的大小写转的问题,一般都是先判断一个字母的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。

所以,无需判断其原来是大写还是小写就能实现大写变小写、小写变大写,

且适用于所有编程语言。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星汉.class

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值