新手求教:字母作为数组下标怎么解释

String s = "adfoweyirlkbasgxalueralsdhg"; // 待统计字符串
int max = 0; // 记录最大出现次数
int[] cnt = new int[127]; // 临时计数用的数组
for (int i = 0; i < s.length(); i++) { // 循环字符以做统计
char c = s.charAt(i); // 取出单个字母
max = (++cnt[c] > max) ? cnt[c] : max; // 计数并检测最大出现次数
}
System.out.println (max);

cnt[c]这里能详细解释一下吗?

字符的ascii码就是数字

我们拿 adfa 这个字符串类距离
其对应的ascii码分别为:97 100 102 97

上面程序的意思是这样子的
max=0
开始遍历

遇到a => cnt[97]=cnt[97]+1=1 max=cnt[97]=1
遇到d => cnt[100]=cnt[100]+1=1 max=1
遇到f => cnt[102]=cnt[102]+1=1 max=1
遇到a => cnt[97]=cnt[97]+1=1+1=2 max=cnt[97]=2

这样就找到了最大值!

ASCII码表一共有128个值,除去值为0的一个127个值,int[] cnt;这个数组共有127个int型内存,数组中每个元素代表每个字符出现的个数,
for循环对字符串进行操作,每个字符都对应一个ASCII码值,比如字符a的ASCII码值为97,那么a每出现了一次,cnt['a']++也就是cnt[97]++。
字符型在内存中存储是用的ASCII码值,所以字符可以直接用来索引

char一定范围内和int等价,值对应见ascii表