一道簡單的關於容器使用的筆試題,思路很簡單,但是有的方法真的是不用不知道。
思路:
(1)用HashMap 裝,key放字符,value放統計數值
(2)預防有的字符出現次數一樣,返回值也要用map裝
(3)同一批的統計數值一樣的字符,在發現比他們更大的出現次數的字符時,必須全部清除掉。
(4)默認第一個就是最大的,然後開始比較。
(5)整個過程分三步:1把String拆成 char[] 。 2循環char[],統計出每個字符出現的次數。 3利用迭代器模式,循環輸出全部的map裏面的元素,並且根據value比較大小。
// 傳入一個字符串,統計每個字符出現的個數,並選出最多的那一個
@RequestMapping("/countChar")
public Map countChar(){
String a = "abbbbcdaaa";
char [] strArr = a.toCharArray();
Map<Character,Integer> countMap = new HashMap<Character,Integer>();
Map<Character,Integer> bigMap = new HashMap<Character,Integer>();
for (int i = 0; i < strArr.length; i++) {
// 首先判斷map中是否有這個字符,沒有的話新增,有的話value+1。
if(countMap.get(strArr[i]) == null){
// 找不到就是空,設置value爲1
countMap.put(strArr[i], 1);
} else {
// 找到了就value值+1
countMap.put(strArr[i], countMap.get(strArr[i])+1);
}
}
Integer MaxValue = 0;
// 循環找出value值最大的key,就是出現最多的字符(注意可能有多個出現次數相同)
Iterator<Map.Entry<Character,Integer>> iterator = countMap.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry entry = iterator.next();
Character NowChars = (Character) entry.getKey();
Integer NowValue = (Integer) entry.getValue();
if(bigMap.isEmpty()){
// 如果是空的,則把第一個當最大的放進去
bigMap.put(NowChars,NowValue);
MaxValue = NowValue;
} else {
// 不是空,則拿value出來比較
if(NowValue> MaxValue){
// 如果當前循環的數值大於定義中的最大,清空原來的map表, 再把新的放進去。
bigMap.clear();
bigMap.put(NowChars,NowValue);
} else if(NowValue == MaxValue){
// 統計數值相等,不清空map,直接放入
bigMap.put(NowChars,NowValue);
} else {}
}
}
return bigMap;
}