题目链接
题目描述
实现代码
个人代码,未AC,因为在力扣的编译器中没法使用StringTokenizer:
class Solution {
public String mostCommonWord(String paragraph, String[] banned) {
Map<String, Integer> map = new HashMap<>(paragraph.length());
StringTokenizer tokenizer = new StringTokenizer(paragraph, " ");
Set<String> container = new HashSet<>();
for(String s : banned) {
container.add(s);
}
int max = 0;
String result = null;
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken().replaceAll("[^a-zA-Z]", "").toLowerCase();
if(container.contains(token)){
continue;
}
Integer count = map.get(token);
Integer newCount = (count == null ? 1 : count+1);
map.put(token, newCount);
if(max < newCount) {
max = newCount;
result = token;
}
}
return result;
}
}
官方实现代码:
class Solution {
public String mostCommonWord(String paragraph, String[] banned) {
Set<String> bannedSet = new HashSet<String>();
for (String word : banned) {
bannedSet.add(word);
}
int maxFrequency = 0;
Map<String, Integer> frequencies = new HashMap<String, Integer>();
StringBuffer sb = new StringBuffer();
int length = paragraph.length();
for (int i = 0; i <= length; i++) {
if (i < length && Character.isLetter(paragraph.charAt(i))) {
sb.append(Character.toLowerCase(paragraph.charAt(i)));
} else if (sb.length() > 0) {
String word = sb.toString();
if (!bannedSet.contains(word)) {
int frequency = frequencies.getOrDefault(word, 0) + 1;
frequencies.put(word, frequency);
maxFrequency = Math.max(maxFrequency, frequency);
}
sb.setLength(0);
}
}
String mostCommon = "";
Set<Map.Entry<String, Integer>> entries = frequencies.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
String word = entry.getKey();
int frequency = entry.getValue();
if (frequency == maxFrequency) {
mostCommon = word;
break;
}
}
return mostCommon;
}
}