闲来无事,入坑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跑的还是有点快。