思路:统计每个字母从1-players排名出现的次数,然后自定义排序函数进行排序
class Solution {
public String rankTeams(String[] votes) {
int voters = votes.length;
int players = votes[0].length();
int[][] voteboard = new int[26][players];
for(int i = 0;i < players;i++){
for(int j = 0;j < votes.length;j++){
char c = votes[j].charAt(i);
voteboard[c-'A'][i]++;
}
}
Integer[] arr = new Integer[players];
for(int i = 0;i < players;i++){
char c = votes[0].charAt(i);
arr[i] = c - 'A';
}
//new Comparator不能直接对int[] 数组进行排序呢
Arrays.sort(arr,new Comparator<Integer>(){
public int compare(Integer a,Integer b){
for(int i = 0;i < players;i++){
if(voteboard[a][i] != voteboard[b][i]){
return voteboard[b][i]-voteboard[a][i];
}
}
return a - b;
}
});
StringBuilder res = new StringBuilder("");
for(int i = 0;i < players;i++){
res.append((char)(arr[i]+'A'));
}
return res.toString();
}
}