451_根据字符出现频率排序

简介: 451_根据字符出现频率排序

451_根据字符出现频率排序

 

package 队列.优先级队列;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.PriorityQueue;
/**
 * https://leetcode-cn.com/problems/sort-characters-by-frequency/
 * 
 * @author Huangyujun
 *
 *         出现频率:哈希表【当前字母 ,次数】 优先队列【】
 */
public class _451_根据字符出现频率排序 {
    /**
     * 官网解法:与我相比://取出所有的key【字符】构成一个集合,【通过map.get(字符)】进行降序排序 List<Character> list =
     * new ArrayList<Character>(map.keySet()); Collections.sort(list, (a, b) ->
     * map.get(b) - map.get(a));
     * 
     * @author Huangyujun
     *
     */
    class Solution2 {
        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;
                map.put(c, frequency);
            }
            // 取出所有的key【字符】构成一个集合,【通过map.get(字符)】进行降序排序
            // 然后 stringBuffer 进行拼接
            List<Character> list = new ArrayList<Character>(map.keySet());
            Collections.sort(list, (a, b) -> map.get(b) - map.get(a));
            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);
                for (int j = 0; j < frequency; j++) {
                    sb.append(c);
                }
            }
            return sb.toString();
        }
    }
    /**
     * 我卡壳的解法:缺少了一些知识储备:通过entrySet 取到结点集合
     * ArrayList<Character>(map.keySet()); Collections.sort(list, (a, b) ->
     * map.get(b) - map.get(a));
     */
//    public String frequencySort(String s) {     
//        HashMap<Character, Integer> map = new HashMap<>();
//        int len = s.length();
//        for(int i = 0; i < len; i++) {
//            Character ch = s.charAt(i);
//            if(map.containsKey(ch)) {
//                int count = map.get(ch);
//                map.put(ch, count);
//            }else {
//                map.put(ch, 1);
//            }
//        }
//        StringBuffer sb = new StringBuffer();
//        int size = map.size();//无法通过value得到key呀, 通过keySet 拿出所有的 key构成集合,然后,通过工具类Collections 进行排序
//        for(int i = 0; i < size - 1; i++) {
//            //假设当前是最大数
//            int count = map.get(i);
//        
//            for(int j = 1; j < size; j++) {
//                if(count < map.get(j)) {
//                    count = map.get(j);
//                }
//            }
//            
//        }
//        return null;        
//    }
}
目录
相关文章
|
3月前
|
算法
统计一字符串中,重叠字符出现的次数
统计一字符串中,重叠字符出现的次数
28 0
|
5月前
|
存储 Python
判断一个字符串中出现次数最多的字符,统计这个次数?
判断一个字符串中出现次数最多的字符,统计这个次数?
65 0
|
11月前
|
JavaScript 前端开发
判断一个字符串中出现次数最多的字符,统计这个次数
判断一个字符串中出现次数最多的字符,统计这个次数
68 0
判断一个字符串中出现次数最多的字符 统计这个次数
判断一个字符串中出现次数最多的字符 统计这个次数
|
存储 算法 C语言
【二分查找】2080. 区间内查询数字的频率
二分查找是一种高效的查找算法,其时间复杂度为 O(log n)。在许多情况下,我们需要在一个有序数组中找到某个目标值的搜索范围。本文将介绍一种基于二分查找的搜索范围查找算法,该算法能够快速找到目标值在数组中的起始和结束位置。
113 0
LeetCode 451. 根据字符出现频率排序
给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
83 0
|
人工智能 算法 JavaScript
最长连续不重复的序列
最长连续不重复的序列
|
算法 前端开发 测试技术
【前端算法】字符串中连续最多的字符以及次数
双指针与双层循环“跳步”的比较
|
机器学习/深度学习
748. 最短补全词 : 简单字符串计数模拟
748. 最短补全词 : 简单字符串计数模拟
|
机器学习/深度学习
440. 字典序的第K小数字 : 计数模拟运用题
440. 字典序的第K小数字 : 计数模拟运用题