我在学习数据结构和算法,还有一个小问题,就是如何找到字符串中出现最多的字符。
我理解一般的目标——拥有一个表示特定字符计数的数组,我显然理解如何在数组中找到max,但我对这堆代码(来自https://www.geeksforgeeks.org/return-maximum-occurring-character-in-the-input-string/):
int count[] = new int[256];
for (int i=0; i<str.length(); i++)
count[str.charAt(i)]++; <-- what I don't understand
我正在初始化count数组以保存int,但在for循环中,我正在搜索字符串中的特定字符,例如:
count["t"]++
所以它基本上告诉我“给我指数t的值”?我怎么能用chararter搜索我应该用索引搜索的地方呢?
在Kotlin我也有了期待( count[str.get(i)]
)应该是int,而不是char。
我可能错过了阻止我理解这一点的基本概念,但在短暂的谷歌搜索之后,我没有找到太多。
2条答案
按热度按时间w41d8nur1#
基本上,
count[str.charAt(i)]++
,存储输入字符串中每个字符的计数。java将每个char索引转换为ascii值。3gtaxfhh2#
java将转换
char
变成一个int
,例如,“a”到65
根据ASCII
table。只要你
string
不包含将返回大于的值的字符255
(例如。,"€"
),一组256
位置将足以绘制可能的chars
进入阵列位置。例如,对于英语字母表来说,这就足够了。然而,由于java中的char是2 bytes
(16位),大小的数组65536
(2^16)足够安全了。您还可以计算max
int
值,并相应地分配数组:回到你的问题:
皈依者
some_char
变成一个int
,并在相应数组上递增一个值count
位置。你可以把这个过程看作是一个简单的散列函数,它将charMap到int,尽管它很简单,但它非常适合当前的问题,因为它唯一地将给定的charMap到数组上的一个位置。
我正在初始化count数组以保存int,但在for循环中,我正在搜索字符串中的特定字符,例如:
count[“t”]++所以它基本上告诉我“给我索引“t”的值”?我怎么能用chararter搜索我应该用索引搜索的地方呢?
请注意
count["t"]++
会给你一个编译错误,函数str.charAt(i)
还给你一个char
,不是String
,因此是“t”,而不是“t”。运行示例:
输出: