給定字符串,求出現次數最多的那個字母及次數,如有多個重複則都輸出

給定字符串,求出現次數最多的那個字母及次數,如有多個 重複則都輸出。

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


還有一篇同樣討論此題的博客,請點擊

發佈了36 篇原創文章 · 獲贊 18 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章