力扣-10.2-451

在这里插入图片描述
在这里插入图片描述
应用桶排序:

class Solution {
    
    
    public String frequencySort(String s) {
    
    
        char[] cstr=s.toCharArray();
		Map<Character, Integer> frequencyForS=new HashMap<Character, Integer>();
		for(char c:cstr) {
    
    
			frequencyForS.put(c, frequencyForS.getOrDefault(c, 0)+1);
		}//结束之后所有的字符出现的次数已经放入HashMap中
		List<Character>[] buckets=new ArrayList[cstr.length+1];//列表的列表
		for(char c:frequencyForS.keySet()) {
    
    
			int frequency=frequencyForS.get(c);
			if(buckets[frequency]==null){
    
    
				buckets[frequency]=new ArrayList<Character>();
			}
			buckets[frequency].add(c);
		}
		StringBuilder str=new StringBuilder();
		for(int i=buckets.length-1;i>=0;i--) {
    
    
			if(buckets[i]==null) {
    
    
				continue;
			}
			for(char c:buckets[i]) {
    
    
				for(int j=0;j<i;j++) {
    
    
					str.append(c);
				}
			}
		}
		return str.toString();
    }
}

总结:关于频率的都可以使用桶排序来操作,特别是在根据频率的大小排序后要输出原始对应的数据时。

猜你喜欢

转载自blog.csdn.net/Desperate_gh/article/details/108904094