繁体   English   中英

需要找到字符串中最频繁出现的字符并返回出现的次数

[英]Need to find the character most frequent in a string and return the number of times it appears

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就是这样,它可以工作,然后当它返回时,我将返回max,但是现在我必须打印它。

现在我很确定自己搞砸了很多事情。 但是我认为它们的最高编号仍会保留到最后,并且通过对数组进行排序,我可以检索出最频繁出现的字符的次数。

对于字符串,我使用“ habakkuk”,并且由于有3 k,我希望打印“ 3”,但没有。 谁能告诉我我在做什么错? 谢谢!

你只有一个小错字

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

只是一个建议;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM