需要找到字符串中最常见的字符并返回它出现的次数

时间:2016-03-04 02:14:30

标签: java

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但是它没有。谁能告诉我我做错了什么?谢谢!

1 个答案:

答案 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();

只是一个建议; - )