题目:
一个字符串中可能包含a~z中的多个字符,如有重复,求出现次数最多的那个字母及次数,如有多个重复的则都求出。
分析:
题目限定只有a~z,所以开辟一个长度26的数组bucket即可,数组元素记录相应出现的次数,
一次遍历,bucket填好,
二次遍历,找到次数最多的元素(用List存放重复的情况)。
package javainterview;
import java.util.ArrayList;
public class Q7_1_3 {
public static void maxLetter(String s){
int[] bucket = new int[26];
for(int i=0; i<s.length(); i++){
char ch = s.charAt(i);
int index = ch-'a';
bucket[index]++;
}
ArrayList<Integer> result = new ArrayList<Integer>();
int max = 0;
for(int i=0; i<bucket.length; i++){
if(bucket[i] == 0)
continue;
if(bucket[i] > max){
result.clear();
result.add(i);
max = bucket[i];
}else if(bucket[i] == max){
result.add(i);
}
}
for(Integer item : result){
System.out.println( (char)(item+'a') + ": " + bucket[item]);
}
}
public static void main(String[] args) {
String s = "cabdccdd";
maxLetter(s);
}
}