初入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提交記錄

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