初入LeetCode,819 Most Common Word

闲来无事,入坑leetcode。
第一题819 MostCommon Word


思路
对第一个输入的字符串进行分割,统计每个单词出现的频率。要找出出现频率最高的单词且该单词不包含在禁用列表中,则可以将禁用列表中的每个单词的出现频率改为0,然后找出出现频率最大的单词就行。
如何统计每个单词的频率?
要回答这个问题,我们可以将目光头像Java的map类,这个类可以存储键值对,键我们设为每个单词,值设为单词出现的频率。遍历由输入的字符串分割得到的字符串数组,若包含该单词,则单词出现次数+1;若不包含,则添加该键值对,value设为1。
差不多这样应该就行了,然后噼里啪啦的就在eclipse上把代码敲出来了。

package com.lemon.app;

import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.StringTokenizer;

public class MostCommonWord {

    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<String, Integer>();
        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);
        String inputString = scanner.nextLine().toLowerCase();
        String bannedString = scanner.nextLine().toLowerCase();

        //分割原始输入字符串
        StringTokenizer stringTokenizer = new StringTokenizer(inputString, " |!|\\?|'|,|;|\\.");
        while (stringTokenizer.hasMoreTokens()) {
            String temp = stringTokenizer.nextToken();
            if(!map.containsKey(temp)) {
                map.put(temp, 1);
            }else {
                Integer count = map.get(temp);
                map.remove(temp);
                map.put(temp, ++count);
            }
        }
        //分割禁止单词
        StringTokenizer stringTokenizer2 = new StringTokenizer(bannedString, "[|]|,|\"");
        Set<String> set = new HashSet<String>();
        while (stringTokenizer2.hasMoreTokens()) {
            set.add(stringTokenizer2.nextToken());
        }
        //在原始字符串数组中将禁止单词出现次数设置为0
        Iterator<String> iterator = set.iterator();
        while(iterator.hasNext()) {
            String bannedWord = iterator.next();
            if(map.containsKey(bannedWord)) {
                map.remove(bannedWord);
                map.put(bannedWord, 0);
            }else {

            }
        }
        //找到出现次数最大的单词次数与单词
        Integer maxFrequent = Collections.max(map.values());
        Iterator<String> iterator2 = map.keySet().iterator();
        while(iterator2.hasNext()) {
            String tempWord = iterator2.next();
            if(map.get(tempWord) == maxFrequent) {
                System.out.println(tempWord);
            }
        }
    }

}

结果,提交的时候报错了。找了半天,发现提交的时候,页面自动生成有函数,我们只需要在其中填写函数内容并返回值就行,不用我们自己亲自写输入函数。好吧,弄了半天,终于还是pass了。

import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.StringTokenizer;
class Solution {
    public String mostCommonWord(String paragraph, String[] banned) {
        Map<String, Integer> map = new HashMap<String, Integer>();
        StringTokenizer stringTokenizer = new StringTokenizer(paragraph.toLowerCase(), " |!|\\?|'|,|;|\\.");
        while (stringTokenizer.hasMoreTokens()) {
            String temp = stringTokenizer.nextToken();
            if(!map.containsKey(temp)) {
                map.put(temp, 1);
            }else {
                Integer count = map.get(temp);
                map.remove(temp);
                map.put(temp, ++count);
            }
        }
        for(int i=0;i<banned.length;i++){
            if(map.containsKey(banned[i])){
                map.remove(banned[i]);
                map.put(banned[i],0);
            }else{

            }
        }
        Integer maxFrequent = Collections.max(map.values());
        Iterator<String> iterator2 = map.keySet().iterator();
        String answer = null;
        while(iterator2.hasNext()) {
            String tempWord = iterator2.next();
            if(map.get(tempWord) == maxFrequent) {
                answer = tempWord;
            }
        }
        return answer;
    }
}

以上为在leetcode上提交的代码片段。在后台查看,发现我的Java跑的还是有点快。
后台查看的java提交记录

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章