列表

详情


819. 最常见的单词

给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。

题目保证至少有一个词不在禁用列表中,而且答案唯一。

禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。

 

示例:

输入: 
paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."
banned = ["hit"]
输出: "ball"
解释: 
"hit" 出现了3次,但它是一个禁用的单词。
"ball" 出现了2次 (同时没有其他单词出现2次),所以它是段落里出现次数最多的,且不在禁用列表中的单词。 
注意,所有这些单词在段落里不区分大小写,标点符号需要忽略(即使是紧挨着单词也忽略, 比如 "ball,"), 
"hit"不是最终的答案,虽然它出现次数更多,但它在禁用单词列表中。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: string mostCommonWord(string paragraph, vector<string>& banned) { } };

golang 解法, 执行用时: 0 ms, 内存消耗: 3 MB, 提交时间: 2021-07-01 14:46:36

func mostCommonWord(paragraph string, banned []string) string {
    paragraph = strings.ToLower(paragraph)
    words := strings.FieldsFunc(paragraph, func(r rune) bool {
		return !unicode.IsLetter(r)
	})
    mp := make(map[string]int)
    ans, freq := "", 0
    for _, word := range words {
        if in_array(word, banned) {
            continue
        }

        mp[word]++
        if mp[word] > freq {
            freq = mp[word]
            ans = word
        }
    }
    return ans
}

func in_array(s string, words []string) bool {
    for _, word := range words {
        if word == s {
            return true
        }
    }
    return false
}

上一题