根据字符出现频率排序Java解法

该问题要求对输入字符串中的字符按出现频率降序排序。首先,使用哈希映射记录每个字符的频率,然后对字符列表进行排序,最后构建新的排序后字符串。

给定一个字符串 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类型
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值