2. 按照字符出现次数对字符串排序
451. Sort Characters By Frequency (Medium)
实现思路:
- 1.建立map字典,统计字符串中每个元素出现的次数
- 2.建立集合数组,以map中的值为集合数组下表,map的键为集合数组元素
- 3.将集合数组从大到小赋值给新集合。因为可能r数组中的某些值为null,故要进行该操作
字符串方法简介
项目源码
package order;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
public class Order3_frequencySort {
public static void main(String[] args) {
String str = "tree";
char[] ch = str.toCharArray();
Map<Character, Integer> frequencyForNum = new HashMap();
for (char c: ch){
frequencyForNum.put(c,frequencyForNum.getOrDefault(c,0)+1);
}
List<Character>[] frequencyBucket = new ArrayList[ch.length+1];
for (char c: frequencyForNum.keySet()) {
int f = frequencyForNum.get(c);
if (frequencyBucket[f]==null){
frequencyBucket[f] = new ArrayList<>();
}
frequencyBucket[f].add(c);
}
StringBuilder stringBuilder = new StringBuilder();
StringBuffer stringBuffer = new StringBuffer();
List<Character> results = new ArrayList<>();
for (int i = frequencyBucket.length-1;i >= 0;i--){
if (frequencyBucket[i] == null)
continue;
for (char c: frequencyBucket[i]){
for (int j=0;j<i;j++){
stringBuilder.append(c);
stringBuffer.append(c);
results.add(c);
}
}
}
System.out.println("用stringBuilder对象存储字符:"+stringBuilder.toString());
System.out.println("用stringBuffer对象存储字符:" + stringBuffer.toString());
System.out.println("用list结合存储字符:" + results);
}
}
输出结果
