给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。
返回 已排序的字符串 。如果有多个答案,返回其中任何一个。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sort-characters-by-frequency
例:
输入: s = "tree"
输出: "eert"
解释: 'e'出现两次,'r'和't'都只出现一次。
因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。
解析:
对字符串进行遍历,对每一个字符出现的次数进行记录。然后按照次数多少进行降序排序,然后按照降序进行输出即可。
class Solution {
public String frequencySort(String s) {
Map<Character, Integer> map = new HashMap<Character, Integer>();
int length = s.length(); // 获取字符串长度
for (int i = 0; i < length; i++){ // 遍历字符串
char c = s.charAt(i); // 获取对应坐标的字符
int frequency = map.getOrDefault(c, 0) + 1; // 存在key就在原有的值上+1,不存在即为0
map.put(c, frequency); // 将值进行记录
}
List<Character> list = new ArrayList<Character>(map.keySet()); // 将key值存入list中
Collections.sort(list, (a,b) -> map.get(b) - map.get(a)); // 在list中对值进行降序排列
StringBuffer sb = new StringBuffer(); // 字符串变量,方便修改
int size = list.size(); // 获取集合大小
for(int i =0;i<size;i++){ // 从多到少变量每一种字符
char c = list.get(i); // 获得字符
int frequency = map.get(c); // 获得字符对应的value值
for(int j = 0; j<frequency;j++){ // 根据value值将对应个数的字符存入结果中
sb.append(c); // 存入字符
}
}
return sb.toString(); // 转换成String类型
}
}
该问题要求对输入字符串中的字符按出现频率降序排序。首先,使用哈希映射记录每个字符的频率,然后对字符列表进行排序,最后构建新的排序后字符串。

750

被折叠的 条评论
为什么被折叠?



