LeetCode: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"不是最终的答案,虽然它出现次数更多,但它在禁用单词列表中。

源码:

public String mostCommonWord(String paragraph, String[] banned) {
        //让段落以其他符号结尾
        paragraph = paragraph + " ";
        //1.大小写转换 顺便直接去除符号 顺便分段单词word
        //3.筛掉banned
        int len = paragraph.length(); 
        //存word
        String[] words = new String[1000];
        //存出现次数
        int[] cishu = new int[1000];
        //总词数
        int s = 0;
        StringBuffer word = new StringBuffer();
        for(int i = 0;i < len; i++){
            char c = paragraph.charAt(i);
            //先判断是否是字母
            if((c >= 65 && c <= 90) || (c >= 97 && c <= 122)){
                //大小化小写
                if(c <= 90){
                    c = (char)((int)c + 32);
                }
                word.append(c);
            }else if(word.length() > 0){
                    String cur = word.toString();
                    //筛选bana
                    boolean tag = true;
                    for(int j = 0;j < banned.length; j++){
                        if(cur.equals(banned[j])){
                            tag = false;
                            break;
                        }
                    }
                    //如果不是
                    if(tag){
                        //判断重复
                        if(s > 0){
                            for(int m = 0; m < s; m++){
                                //如果相等
                                if(cur.equals(words[m])){
                                    //更改标记状态
                                    tag = false;
                                    cishu[m] = cishu[m] + 1;
                                }
                            }
                        }
                        //如果没有重复
                        if(tag){
                            words[s] = cur;
                            cishu[s] = 1;
                            s++;
                        }
                    }
                word = new StringBuffer();
            }
        }

        int MaxNum = 0;
        int MaxIndex = 0;
        //最后判断大小
        for(int i = 0; i < s ; i++){
            if(MaxNum < cishu[i]){
                MaxNum = cishu[i];
                MaxIndex = i;
            }
        }
        return words[MaxIndex];
    }
发布了340 篇原创文章 · 获赞 2 · 访问量 8321

猜你喜欢

转载自blog.csdn.net/qq_45239139/article/details/103837547