Java中字符相减的含义解析:lettercounts[c-'a']++代码逻辑疑问
解释
lettercounts[c-'a']++;的工作原理 嘿,你猜的完全在点子上!这行代码的核心就是统计字符串中每个小写字母的出现次数,咱们一步步拆解来看:
1. 先搞懂c - 'a'的含义
在Java里,char类型本质上是一个16位的整数,对应字符的Unicode编码值。对于小写字母来说,'a'到'z'的编码是连续的:
'a'的编码值是97'b'是98,以此类推,'z'是122
所以当你用某个小写字母c减去'a'时,会得到一个0到25之间的整数:
- 如果
c是'a',97 - 97 = 0→ 对应数组索引0 - 如果
c是'z',122 - 97 = 25→ 对应数组索引25 - 中间的字母也会对应到0-25之间的唯一索引,完美匹配你定义的
int[26]数组(数组索引从0开始,正好26个位置对应26个小写字母)
2. lettercounts[索引]++的作用
lettercounts数组初始化时所有元素都是0,++操作就是把对应索引位置的数值加1。结合前面的索引计算,这行代码的完整逻辑就是:
遍历第一个字符串的每个字符,找到它在数组中对应的位置,把该位置的计数加1,最终数组里每个元素就代表对应小写字母在字符串中出现的次数。
举个简单例子:如果第一个字符串是"banana",遍历过程会是这样:
- 遇到
'b'→'b'-'a'=1→lettercounts[1]从0变成1 - 遇到
'a'→0→lettercounts[0]变成1,后续再遇到'a'就依次加到3 - 遇到
'n'→13→lettercounts[13]变成2
这样遍历结束后,lettercounts数组就清晰记录了每个字母的出现次数,为后续对比第二个字符串的字符做准备~
内容的提问来源于stack exchange,提问作者RC2793
相关产品推荐
相关产品推荐

