給定一個字符串數組,找出特定字符出現的頻率。查找字符串數組中字符的頻率
例如。給定數組{「hon」,「bhig」,「zzz」,「hello」}和字符'h',輸出爲3.
以下是我如何解決它: 方法1:遍歷數組,每當該字符出現在當前字符串中時遞增計數器。運行時間是O(n),其中n是數組中所有字符串的累積長度。
方法2:這可以使用HashMap進行優化;如果字符串在數組中重複,這特別有用。以下是我所做的:使用HashMap,其中key = string,value =數組中出現字符串的次數。將給定數組中的所有字符串連同其計數一起放入HashMap中。然後迭代HashMap中的每個鍵值對,計算給定字符出現在鍵(字符串)中的次數,並將其增加HashMap中相應的值。
我的問題是:有沒有更好的方法來做到這一點?
下面的代碼:
注意:請閱讀全文,接受的答案。
public static int findFreq(String[] arr,char c) {
Map<String,Integer> map = new HashMap<String,Integer>();
for(int i=0;i<arr.length;i++) {
if(map.containsKey(arr[i]))
map.put(arr[i],map.get(arr[i])+1);
else
map.put(arr[i], 1);
}
int freq=0;
for(Entry<String,Integer> entr:map.entrySet()) {
String s = entr.getKey();
for(int i=0;i<s.length();i++) {
if(s.charAt(i)==c)
freq += entr.getValue();
}
}
return freq;
}
看到,因爲你將不得不看每個人字符數組來解決這個問題,你永遠不會比O(N)做的更好。我沒有看到如何通過字符串來繪製地圖是有幫助的(事實上,如果你再也不會看到'arr',那麼你不需要地圖)。如果你想保留它,我會從字母表中的每個字母映射到它出現的次數(即'h - > 3')。 –
計算字符串的哈希碼需要查看每個字母。當然,哈希碼可能已經被計算過一次(因此被緩存),第二種方法可能會有更多的工作,並且(平均而言)不能少工作。只有在字符串數量顯着多於1的情況下才有節省。 –