public static int mostCommonChar(String foog){
int anArray[] = new int[foog.length()];
int foober = 0;
char f;
for (int i = 0; i > foog.length(); i++){
f = foog.charAt(i);
foober = 1;
for (int j = i + 1; j < foog.length(); j++){
if (f == foog.charAt(j)){
foober++;
}
anArray[i] = foober;
}
}
Arrays.sort(anArray);
int max = anArray[anArray.length - 1];
System.out.println(max);
return 5;
}
返回5只是如此有效,然后当它返回时我将返回最大值但是现在我必须打印它。
现在我很确定我弄乱了很多东西。但我认为他们最高的数字仍然会结束,通过对数组进行排序,我可以检索最常出现的角色出现的次数。
对于字符串,我使用了“habakkuk”并且我预期“3”打印,因为有3个k但是它没有。谁能告诉我我做错了什么?谢谢!
答案 0 :(得分:0)
你只是有一个小错字
for (int j = i + 1; j > foog.length(); j++)
应该是
for (int j = i + 1; j < foog.length(); j++)
旁注:您可以改进算法。现在它以 O(n²)运行,但您可以在 O(nlogn)中为字母表中的每个字母保留一个计数器。
int[] charCount = new int[26];
char[] chars = foog.toLowerCase().toCharArray();
for (char c : chars) {
charCount[c - 'a']++;
}
Arrays.sort(charCount);
int max = charCount[charCount.length - 1];
或者您甚至可以通过查看最大值来使其在 O(n)中运行,您甚至不需要排序。
int[] charCount = new int[26];
char[] chars = foog.toLowerCase().toCharArray();
for (char c : chars) {
charCount[c - 'a']++;
}
int max = Arrays.stream(charCount).max().getAsInt();
只是一个建议; - )