文字列の配列を指定して、特定の文字の出現頻度を見つけます。
例えば。配列 {"hon","bhig","zzz","hello"} と文字 'h' を指定すると、出力は 3 になります。
解決方法は次のとおりです。 アプローチ 1: 配列内のすべての文字列を反復処理し、現在の文字列にその文字が出現するたびにカウンターをインクリメントします。実行時間は O(n) です。ここで、n は配列内のすべての文字列の累積の長さです。
アプローチ 2: これは HashMap を使用して最適化できます。これは、文字列が配列内で繰り返される場合に特に役立ちます。これが私がやったことです: キー = 文字列と値 = その文字列が配列内で発生する回数である HashMap を取ります。指定された配列内のすべての文字列を、そのカウントとともに 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;
}