我希望有人能帮助我理解为什么我的代码在某些测试用例中不起作用。这是关于问题451:在LeetCode上按频率对字符进行排序。目标是:“给出一个字符串,根据字符的频率以降序对其进行排序。”我的代码通过了34/35个测试用例,但没有通过最后一个。我想知道为什么我的代码可以用于其他测试用例,但不能用于最后一个测试用例,以及如何解决该问题,使其也可以用于最后一个测试用例?
class Solution {
public String frequencySort(String s) {
Map<Character, Integer> map = new HashMap<>();
for(char c: s.toCharArray()){
map.put(c, map.getOrDefault(c, 0) + 1);
}
StringBuilder sb = new StringBuilder(s.length());
Map<Character,Integer> sorted = new TreeMap<>(new Comparator<Character>() {
@Override
public int compare(Character a, Character b){
Integer aValue = map.get(a);
Integer bValue = map.get(b);
if(aValue == bValue) return 1;
return bValue.compareTo(aValue);
}
});
sorted.putAll(map);
for(Map.Entry<Character,Integer> entry: sorted.entrySet()){
int length = entry.getValue();
char toAdd = entry.getKey();
for(int i = 1; i <= length; i++){
sb.append(toAdd);
}
}
return new String(sb);
}
}
答案 0 :(得分:-1)
如果需要,可以在此处使用简单的Scala解决方案:
object Solution {
def frequencySort(s: String): String = {
import collection.mutable.Map
val count: Map[Char, Int] = Map().withDefaultValue(0)
for {
c <- s
} {
count(c) += 1
}
count
.toList.map(x => (x._2, x._1))
.sorted
.reverse
.flatMap(x => List.fill(x._1)(x._2.toString))
.foldLeft("")(_ + _)
}
}