import java.io.*;
import java.util.*;
class Solution {
String normallized
= paragraph.
toLowerCase().
replaceAll("[^a-z]",
""); String[] words
= normallized.
split("\\s+"); Set
<String
> bannedSet
= new HashSet
<>(Arrays.
asList(banned
));
Map
<String,Integer
> freq
= new HashMap
<>(); if(!bannedSet.contains(word) && word.length()> 0){
freq.put(word,freq.getOrDefault(word,0)+1);
}
}
int maxCount = 0;
for(String word
: freq .
keySet()){ int count = freq.get(word);
if(count>maxCount||(count ==maxCount && word.compareTo(result)< 0)){
maxCount= count;
result= word;
}
}
return result;
}
public static void main
(String[] argv
) { System.
out.
println(mostFrequentNonBanned
("Bob hit a ball, the hit BALL flew far after it was hit.",
new String[]{"hit"}).
equals("ball")); System.
out.
println(mostFrequentNonBanned
("It's a beautiful day, isn't it? Beautiful day indeed!",
new String[]{"it's",
"it"}).
equals("beautiful")); System.
out.
println(mostFrequentNonBanned
("Apple orange apple ORANGE",
new String[]{}).
equals("apple")); System.
out.
println(mostFrequentNonBanned
("Wow! This is WOW, just wow... right?",
new String[]{"right"}).
equals("wow")); System.
out.
println(mostFrequentNonBanned
("Hello",
new String[]{}).
equals("hello")); System.
out.
println(mostFrequentNonBanned
("",
new String[]{"anything"}).
equals("")); System.
out.
println(mostFrequentNonBanned
("test test test pass pass",
new String[]{"test"}).
equals("pass"));
}
}
aW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC4qOwpjbGFzcyBTb2x1dGlvbiB7CiAgICBzdGF0aWMgU3RyaW5nICBtb3N0RnJlcXVlbnROb25CYW5uZWQoU3RyaW5nIHBhcmFncmFwaCwgU3RyaW5nW10gYmFubmVkKXsKCiAgICAgICAgU3RyaW5nIG5vcm1hbGxpemVkID0gcGFyYWdyYXBoLnRvTG93ZXJDYXNlKCkucmVwbGFjZUFsbCgiW15hLXpdIiwiIik7CiAgICAgICAgU3RyaW5nW10gd29yZHMgPSBub3JtYWxsaXplZC5zcGxpdCgiXFxzKyIpOwogICAgICAgIFNldDxTdHJpbmc+IGJhbm5lZFNldD0gbmV3IEhhc2hTZXQ8PihBcnJheXMuYXNMaXN0KGJhbm5lZCkpOwoKCiAgICBNYXA8U3RyaW5nLEludGVnZXI+IGZyZXEgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICBmb3IoU3RyaW5nIHdvcmQgOiB3b3JkcyApewogICAgICAgIGlmKCFiYW5uZWRTZXQuY29udGFpbnMod29yZCkgJiYgd29yZC5sZW5ndGgoKT4gMCl7CiAgICAgICAgICAgIGZyZXEucHV0KHdvcmQsZnJlcS5nZXRPckRlZmF1bHQod29yZCwwKSsxKTsKICAgICAgICB9CiAgICB9CiAgICBTdHJpbmcgcmVzdWx0PSAiIjsKICAgIGludCBtYXhDb3VudCA9IDA7CgogICAgZm9yKFN0cmluZyB3b3JkOiBmcmVxIC5rZXlTZXQoKSl7CiAgICAgICAgaW50IGNvdW50ID0gZnJlcS5nZXQod29yZCk7CiAgICAgICAgaWYoY291bnQ+bWF4Q291bnR8fChjb3VudCA9PW1heENvdW50ICYmIHdvcmQuY29tcGFyZVRvKHJlc3VsdCk8IDApKXsKICAgICAgICAgICAgbWF4Q291bnQ9IGNvdW50OwogICAgICAgICAgICByZXN1bHQ9IHdvcmQ7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJndikgeyAgCiAgICBTeXN0ZW0ub3V0LnByaW50bG4obW9zdEZyZXF1ZW50Tm9uQmFubmVkKCJCb2IgaGl0IGEgYmFsbCwgdGhlIGhpdCBCQUxMIGZsZXcgZmFyIGFmdGVyIGl0IHdhcyBoaXQuIiwgbmV3IFN0cmluZ1tdeyJoaXQifSkuZXF1YWxzKCJiYWxsIikpOwogICAgU3lzdGVtLm91dC5wcmludGxuKG1vc3RGcmVxdWVudE5vbkJhbm5lZCgiSXQncyBhIGJlYXV0aWZ1bCBkYXksIGlzbid0IGl0PyBCZWF1dGlmdWwgZGF5IGluZGVlZCEiLCBuZXcgU3RyaW5nW117Iml0J3MiLCAiaXQifSkuZXF1YWxzKCJiZWF1dGlmdWwiKSk7CiAgICBTeXN0ZW0ub3V0LnByaW50bG4obW9zdEZyZXF1ZW50Tm9uQmFubmVkKCJBcHBsZSBvcmFuZ2UgYXBwbGUgT1JBTkdFIiwgbmV3IFN0cmluZ1tde30pLmVxdWFscygiYXBwbGUiKSk7CiAgICBTeXN0ZW0ub3V0LnByaW50bG4obW9zdEZyZXF1ZW50Tm9uQmFubmVkKCJXb3chIFRoaXMgaXMgV09XLCBqdXN0IHdvdy4uLiByaWdodD8iLCBuZXcgU3RyaW5nW117InJpZ2h0In0pLmVxdWFscygid293IikpOwogICAgU3lzdGVtLm91dC5wcmludGxuKG1vc3RGcmVxdWVudE5vbkJhbm5lZCgiSGVsbG8iLCBuZXcgU3RyaW5nW117fSkuZXF1YWxzKCJoZWxsbyIpKTsKICAgIFN5c3RlbS5vdXQucHJpbnRsbihtb3N0RnJlcXVlbnROb25CYW5uZWQoIiIsIG5ldyBTdHJpbmdbXXsiYW55dGhpbmcifSkuZXF1YWxzKCIiKSk7CiAgICBTeXN0ZW0ub3V0LnByaW50bG4obW9zdEZyZXF1ZW50Tm9uQmFubmVkKCJ0ZXN0IHRlc3QgdGVzdCBwYXNzIHBhc3MiLCBuZXcgU3RyaW5nW117InRlc3QifSkuZXF1YWxzKCJwYXNzIikpOwoKICAgIH0KICAgIAp9