public String frequencySort(String s) {
char[] map = new char[123];
char[] ch = s.toCharArray();
for(int i = 0; i < ch.length; i++) {
map[ch[i]]++;
}
StringBuffer sb = new StringBuffer();
while(sb.length() < ch.length) {
int indexOfMax = 0;
for(int i = 0; i < map.length; i++) {
if(map[indexOfMax] < map[i]) {
indexOfMax = i;
}
}
int time = map[indexOfMax];
map[indexOfMax] = 0;
while(time > 0) {
sb.append((char)indexOfMax);
time--;
}
}
return sb.toString();
}
本题的关键点:
1.用map数组记录字符出现次数,以字符为数组下标,出现次数为值;
2.开始给StringBuffer赋值:找到出现次数最大的那个字符之后,循环这个次数把字符加到StringBuffer里,并把这个字符的出现次数设为0;