2016-03-04 28 views
0
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

你只是有一個小錯字

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

只是一個建議;-)

相關問題