领扣LintCode算法问题答案-1369. 最频繁单词

    科技2022-07-13  134

    领扣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 { /** * @param paragraph: * @param banned: * @return: nothing */ 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; } }

    原题链接点这里

    鸣谢

    非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。 欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。

    Processed: 0.008, SQL: 8