【Java】【字节面试】字符串中 出现次数最多的字符和 对应次数
题目
字符串中 出现次数最多的字符和 对应次数
输入:hello
输出:l,2
思路
通用思路
1. 对于统计次数问题,常用map
key:单个字符
value:次数, 这样能够 更好的记录对象+次数,方便后续需要
2.对于 一个序列(set,map,数组等等),找到一个最值问题
常用 :
定义一个临时变量,max值=0;
遍历序列 找到更大值,就更新max
举例:找int[10] arr 的最大值
//定义临时变量int max=0;//遍历,如果更大就更新maxfor(int i=0;i<arr.length();i++){if(arr[i]>max){//更新max=arr[i];}}//结果就是max
2.1 初始化最值
找最大值:
1)Integer max=0
2)第一个元素
找最小值得:
初始化方式 | 适用场景 | 注意事项 |
---|---|---|
Integer.MAX_VALUE | 通用,推荐 ✅ | 适用于所有整数(包括负数) |
序列的第一个元素 | 非空序列 | 需额外判空 |
本题:
1.遍历,放进map中
key :字符
value:出现次数
2.已知map,怎么找到 次数最多 字符+次数
Integer max;
String strMax;
遍历map, 如果value>max
value替换max key替换 strmax
代码
public static void main(String[] args) {//找出当前字符串 出现次数最多字符 以及对应次数//输入hello 输入l,2String str="hello";HashMap<String, Integer> map=new HashMap<String, Integer>();//1.遍历String 放进mapfor (int i = 0; i < str.length(); i++) {String strcur=String.valueOf(str.charAt(i));//wuif (!map.containsKey(strcur)){map.put(strcur,1);}//youelse {Integer value=map.get(strcur);map.put(strcur,value+1);}}//结果//key h e l o//value 1 1 2 1//2.定于临时变量 strmax maxString strmax="";Integer max = 0;//3-方法1 遍历entrys 如果for (Map.Entry<String,Integer> entry: map.entrySet()) {// 如果 value>maxif(entry.getValue()>max) {//value替换max key替换 strmaxmax= entry.getValue();strmax= entry.getKey();}}System.out.println(max+","+strmax);//3-方法2 遍历key 如果// 如果 key.get>max//value替换max key替换 strmaxfor (String key:map.keySet()){// 如果 key.get>maxif (map.get(key)>max) {//value替换max key替换 strmaxmax=map.get(key);strmax=key;}}System.out.println(max+","+strmax);}
知识点总结:
1.手撕技巧
不确定左边类型怎么写的情况下
不 new,直接使用
2.map的4大遍历 方式
- 如何遍历 Map?
- 使用
keySet()
、values()
或entrySet()
。
- 使用
- 获得键值对的set,然后遍历
- 获得键的set,然后遍历
- 获得值的对象
- lambda
方法 | 核心 API | 优点 |
entrySet() |
| 直接获取键和值,效率高 |
keySet() |
| 适合只需要键的场景 |
values() |
| 适合只需要值的场景 |
forEach() |
| 代码简洁,适合现代 Java |
2)
3.lambda 不能修改外部变量
通用思路总结
1. 对于统计次数问题,常用map
key:单个字符
value:次数, 这样能够 更好的记录对象+次数,方便后续需要
2.对于 一个序列(set,map,数组等等),找到一个最值问题
常用 :
定义一个临时变量,max值=0;
遍历序列 找到更大值,就更新max
举例:找int[10] arr 的最大值
//定义临时变量int max=0;//遍历,如果更大就更新maxfor(int i=0;i<arr.length();i++){if(arr[i]>max){//更新max=arr[i];}}//结果就是max
2.1 初始化最值
找最大值:
1)Integer max=0
2)第一个元素
找最小值得:
初始化方式 | 适用场景 | 注意事项 |
---|---|---|
Integer.MAX_VALUE | 通用,推荐 ✅ | 适用于所有整数(包括负数) |
序列的第一个元素 | 非空序列 | 需额外判空 |