0
点赞
收藏
分享

微信扫一扫

【数据结构与算法】统计字符串中字符出现的次数


目录

​​一、需求分析​​

​​二、代码实现​​

​​三、结果展示​​

一、需求分析

需求:统计字符串中字符出现的长度,按照长度排序;第一次出现字符排序

二、代码实现

package sort;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
* @author Marion
* @date 2021/7/14 15:11
*/
public class StringSort {

public static void main(String[] args) {
/**
* 需求:统计字符串中字符出现的长度,按照长度排序;第一次出现字符排序
*
* 1. 将字符串切割成数组,遍历数组记录字符串出现的次数,k -> v 关联数组存储,k是字符,v是出现次数
* 2. 按照关联数组v倒序排序,输出关联数组
* 3. 遍历字符串,将k放入索引数组中,存在则不放入,最后输出索引数组
*/
String target = "adshiusdhuheuwqheqnwkjnkdasknasdkasjdkljl";
char[] chars = target.toCharArray();
HashMap<String, Integer> numSort = new HashMap<>();
for (int i = 0; i < chars.length; i++) {
if (numSort.get(String.valueOf(chars[i])) != null) {
numSort.put(String.valueOf(chars[i]), numSort.get(String.valueOf(chars[i])) + 1);
} else {
numSort.put(String.valueOf(chars[i]), 1);
}
}
Stream.of(numSort).forEach(System.out::println);
Map<String, Integer> linkedMap = mapSortByValue(numSort);
Stream.of(linkedMap).forEach(System.out::println);
}

/**
* 对map按照value值正序并且返回
*/
public static Map<String, Integer> mapSortByValue(Map<String, Integer> map) {
Set<Map.Entry<String, Integer>> entries = map.entrySet();
List<Map.Entry<String, Integer>> list = new ArrayList<>(entries);
list.sort((o1, o2) -> {
if (o1.getValue() > o2.getValue()) {
return -1;
} else if (o1.getValue() < o2.getValue()) {
return 1;
}
return 0;
});
LinkedHashMap<String, Integer> result = new LinkedHashMap<>();
list.forEach(v -> result.put(v.getKey(), v.getValue()));
return result;
}

}

三、结果展示

【数据结构与算法】统计字符串中字符出现的次数_数组

举报

相关推荐

0 条评论