领扣LintCode算法问题答案-1369. 最频繁单词
目录
1369. 最频繁单词描述样例 1:样例 2:
题解鸣谢
1369. 最频繁单词
描述
给定一个段落和一组限定词,返回最频繁的非限定单词。已知至少有一个单词是非限定的,并且答案唯一。 限定词都是以小写字母给出,段落中的单词大小写不敏感。结果请返回小写字母。
1 <= paragraph.length <= 1000.1 <= banned.length <= 100.1 <= banned[i].length <= 10.答案唯一,并且返回小写(即使以大写字母出现在段落中就,或是一个专有名词.)段落仅由字母、空格、标点!?’,;.组成。不同的单词会被空格隔开.没有连字符或者连字单词.单词仅由小写字母组成,没有所有格或别的标点符号。
样例 1:
输入: paragraph = "Bob hit a ball, the hit BALL flew far after it was hit." 和 banned = ["hit"]
输出: "ball"
解释:
"hit" 出现3次但是限定词。
"ball" 出现两次,是最频繁的非限定词。
注意段落中大小写不敏感。
标点符号请忽略 (即使紧挨单词,例如"ball,"),
样例 2:
输入: paragraph = "a a a b b c c d" 和 banned = ["a","b"]
输出: "c"
解释:
"a"和"b"都是限定词
"c"出现了2次,而"d"只出现过一次
所以输出"c"
题解
public class Solution {
public String
mostCommonWord(String paragraph
, String
[] banned
) {
Arrays
.sort(banned
);
paragraph
= paragraph
.toLowerCase();
Map
<String, Integer> counter
= new HashMap<>();
String maxWord
= null
;
int max
= 0;
for (String word
: paragraph
.split("[\\s!?',;.]+")) {
if (Arrays
.binarySearch(banned
, word
) < 0) {
Integer count
= counter
.get(word
);
if (count
== null
) {
count
= 0;
}
count
++;
if (count
> max
) {
max
= count
;
maxWord
= word
;
}
counter
.put(word
, count
);
}
}
return maxWord
;
}
}
原题链接点这里
鸣谢
非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。 欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。