閒來無事,入坑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跑的還是有點快。