eg,String data ="aaavzadfsdfsdhshdWashfasdf";
這是一道很基礎的面試題,在別的博客上也看到關於該題的解答,但總體來說感覺所給出的解法都有點拖沓,於是自己又 想出來一種較爲簡潔高效的解法(自己認爲,有問題的地方大家可以挑出來),大體思路是:
1. 先將字符串中以出現的字符爲關鍵字,出現的次數爲值存放到hashmap中
2. 設置一個list記錄出現次數最多的字母,max記錄出現最多的次數,遍歷hashmap
(1)如果下一個字符的出現次數小於max,則continue,
(2)等於max,則添加到list
(3)大於max,清空list,更新max,list中添加該字符
public class CountOfChar {
public static void main(String[] args) {
//String data ="aaavzadfsdfsdhshdWashfasdf";
String data = "aaaabbbbccccc";
Map<Character,Integer> countMap = new HashMap<Character,Integer>();
for(int i=0;i<data.length();i++){
char c = data.charAt(i);
if(countMap.containsKey(c)){
countMap.put(c,countMap.get(c)+1); //統計每個字符出現的次數
}else{
countMap.put(c, 1); //該字符第一次出現
}
}
for(Map.Entry<Character, Integer> me:countMap.entrySet()){
System.out.println(me.getKey()+"\t" + me.getValue());
}
LinkedList<Character> list=new LinkedList<Character>();
int max=0;
for(Map.Entry<Character, Integer> me:countMap.entrySet()){
if(me.getValue()<max){
continue;
}
if(me.getValue()==max){
list.add(me.getKey());
}
if(me.getValue()>max){
list.clear();
max=me.getValue();
list.add(me.getKey());
}
}
System.out.println("++++++++++++++++++++++++++");
for(Character c:list){
System.out.println(c+"\t" + max);
}
}
}
還有一篇同樣討論此題的博客,請點擊