注意:只要不是数字和字母,都算分隔符
思路:
1.处理整行字符串
用双指针,选出来每个单词,统一成小写,存到 map <单词,出现次数> 中
2.遍历 map,不断更新 res
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Main {
static Map<String, Integer> map = new HashMap<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int j = 0;
for (int i = 0; i < s.length(); i++) {
if (check(s.charAt(i))) {
j = i;
while (j < s.length() && check(s.charAt(j))) j++;
String word = s.substring(i, j).toLowerCase();//统一成小写
i = j;
if (map.containsKey(word)) {
int cnt = map.get(word);
map.put(word, cnt + 1);
} else {
map.put(word, 1);
}
}
}
String res = "";
int max = 0;//单词出现的最大次数
Set<String> keys = map.keySet();
for (String word : keys) {
int cnt = map.get(word);//当前单词出现的次数
//当前单词次数更大 或者 次数一样但是词典序更小,则更新
if (cnt > max || (cnt == max && word.compareTo(res) < 0)) {
max = cnt;
res = word;
}
}
System.out.println(res + " " + max);
}
private static boolean check(char c) {
if(c >= 'A' && c <= 'Z') return true;
if(c >= 'a' && c <= 'z') return true;
if(c >= '0' && c <= '9') return true;
return false;
}
}
这个没有超时吗,PAT好像超时了
我都不去PAT官网提交了,在这能AC就行了,Java表示太难了,y总的方法都超时还能怎么破 =.=!