题目:
输入描述
每个输入数据为行,数据之间以 1 11 个空格间隔。
第 1 11 个数字表示依次统计出现最多的 3 33 个字符。
第 2 22 个数字表示每 10 1010 个字符进行增量统计。
第 3 33 个是需要统计的字符串。
不需要校验入参合法性测试用例保证输入合法,保证第一次统计有足够的不同字符。
统计时区分字符大小写。
输入字符串最大长度为 2000000 20000002000000 。
输出描述
输出统计的结果的字符串。
样例一:
输入:3 10 aaagggbcce9999333213gggggaaaaa
输出:gac93gga9
样例二:
输入:1 10 1234567890
输出:9
java:不保证完全正确:
public static void findHotWorld(){
Scanner in = new Scanner(System.in);
String[] s = in.nextLine().split(" ");
int num = Integer.valueOf(s[0]);
int length = Integer.valueOf(s[1]);
int index = 0;
StringBuffer res = new StringBuffer();
String str = s[2];
while(index < str.length()){
String tmp = "";
if (index + length > str.length()){
tmp = str;
}else {
tmp = str.substring(0,index + length);
}
index += length;
HashMap<String,Integer> map = new HashMap<>();
for (int i = 0; i < tmp.length(); i++) {
String key = String.valueOf(tmp.charAt(i));
if (Objects.isNull(map.get(key))){
map.put(key,1);
}else {
map.put(key,map.get(key)+1);
}
}
ArrayList<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
int t = o2.getValue() - o1.getValue();
if (t == 0){
t = o2.getKey().compareTo( o1.getKey());
}
return t;
}
});
for (int i = 0; i < num; i++) {
res.append(list.get(i).getKey());
}
}
System.out.println(res);
}