题目
输入投票详情,计算选手票数,若同票,则输出按名字进行排序,字母小的在前,若字母一直相同,则输出名字短的。
示例
输入:
Tom,Tommy,Lucy,Tom,Tommy,Lucy
输出:
Lucy
解释:Tom,Tommy,Lucy均同票,但L小于T,所以输出Lucy
分析
用hashmap统计票数,重写比较器,按票数降序排序,同票则比较名字。
具体代码
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String[] s = sc.nextLine().split(",");
for(int i = 0;i < s.length;i++){
if(s[i].charAt(0)<'A'||s[i].charAt(0)>'Z'){
System.out.println("error.0001");
return;
}
for(int j = 1;j < s[i].length();j++){
if(s[i].charAt(j)<'a'||s[i].charAt(j)>'z'){
System.out.println("error.0001");
return;
}
}
}
HashMap<String,Integer> map = new HashMap<>();
for(int i = 0;i < s.length;i++){
if(map.containsKey(s[i])){
map.put(s[i],map.get(s[i])+1);
}else{
map.put(s[i],1);
}
}
List<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) {
if(o2.getValue()<o1.getValue()){
return o2.getValue()-o1.getValue();
}
else if(o2.getValue() == o1.getValue()){
int i = 0;
while(i<o2.getKey().length()&&i<o1.getKey().length()&&o2.getKey().charAt(i)==o1.getKey().charAt(i)){
i++;
}
if(i < o2.getKey().length()&&i < o1.getKey().length()){
return o1.getKey().charAt(i)-o2.getKey().charAt(i);
}else {
return o1.getKey().length()-o2.getKey().length();
}
}
else{
return o2.getValue()-o1.getValue();
}
}
});
System.out.println(list.get(0).getKey());
}
}