![LeetCode 819 最常见的单词[Map 模拟] HERODING的LeetCode之路,第1张 LeetCode 819 最常见的单词[Map 模拟] HERODING的LeetCode之路,第1张](/aiimages/LeetCode+819+%E6%9C%80%E5%B8%B8%E8%A7%81%E7%9A%84%E5%8D%95%E8%AF%8D%5BMap+%E6%A8%A1%E6%8B%9F%5D+HERODING%E7%9A%84LeetCode%E4%B9%8B%E8%B7%AF.png)
解题思路:
一道非常简单的模拟题,中间有比较多的处理细节,包括逗号等标点符号的处理,所以就不直接用python字符串分割了。
首先把ban的word放入map中用-1来表示,然后一个字母一个字母遍历,每次遍历出一个单词(都转换为小写)后判断是否是ban的再放入map中,i <= len是为了将最后一个word也能在for循环中判断,在更新map的过程中统计最大数量的word,代码如下:
class Solution {
public:
string mostCommonWord(string paragraph, vector<string>& banned) {
unordered_map<string, int> mp;
// 标记禁用词
for(auto& ban : banned) {
mp[ban] = -1;
}
int len = paragraph.size();
string word, target;
int maxFre = 0;
for(int i = 0; i <= len; i ++) {
if(i < len && isalpha(paragraph[i])) {
word += tolower(paragraph[i]);
} else if(word.size() > 0) {
if(mp[word] != -1) {
mp[word] ++;
if(mp[word] > maxFre) {
maxFre = mp[word];
target = word;
}
}
word = "";
}
}
return target;
}
};
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)