【Java】【字节面试】字符串中 出现次数最多的字符和 对应次数

题目

字符串中 出现次数最多的字符和 对应次数

输入:hello

输出:l,2

思路

通用思路

1. 对于统计次数问题,常用map 

key:单个字符

value:次数, 这样能够 更好的记录对象+次数,方便后续需要

2.对于 一个序列(set,map,数组等等),找到一个最值问题

常用 :

定义一个临时变量,max值=0;

遍历序列  找到更大值,就更新max

举例:找int[10] arr 的最大值

        //定义临时变量
        int max=0;
        //遍历,如果更大就更新max
        for(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,2

        String str="hello";
        HashMap<String, Integer> map=new HashMap<String, Integer>();

        //1.遍历String  放进map
        for (int i = 0; i < str.length(); i++) {
            String strcur=String.valueOf(str.charAt(i));

            //wu
            if (!map.containsKey(strcur)){
                map.put(strcur,1);
            }
            //you
            else {
                Integer value=map.get(strcur);
                map.put(strcur,value+1);
            }
        }
        //结果
        //key   h e l o
        //value 1 1 2 1

        //2.定于临时变量 strmax max
        String strmax="";
        Integer max = 0;

        //3-方法1 遍历entrys  如果
        for (Map.Entry<String,Integer> entry: map.entrySet()) {
            // 如果 value>max
            if(entry.getValue()>max) {
                //value替换max  key替换 strmax
                max= entry.getValue();
                strmax= entry.getKey();
            }
        }
        System.out.println(max+","+strmax);
        

        //3-方法2 遍历key  如果
        // 如果 key.get>max
        //value替换max  key替换 strmax
        for (String key:map.keySet()){
            // 如果 key.get>max
            if (map.get(key)>max) {
                //value替换max  key替换 strmax
                max=map.get(key);
                strmax=key;
            }

        }
        System.out.println(max+","+strmax);


    }

知识点总结:

1.手撕技巧

不确定左边类型怎么写的情况下

不 new,直接使用

2.map的4大遍历 方式

  1. 如何遍历 Map?
    • 使用 keySet()values()entrySet()
  2. 获得键值对的set,然后遍历
  3. 获得键的set,然后遍历
  4. 获得值的对象
  5. lambda

方法

核心 API

优点

entrySet()

map.entrySet()

直接获取键和值,效率高

keySet()

map.keySet()

适合只需要键的场景

values()

map.values()

适合只需要值的场景

forEach()

map.forEach()

代码简洁,适合现代 Java

2)

3.lambda 不能修改外部变量


 通用思路总结

1. 对于统计次数问题,常用map 

key:单个字符

value:次数, 这样能够 更好的记录对象+次数,方便后续需要

2.对于 一个序列(set,map,数组等等),找到一个最值问题

常用 :

定义一个临时变量,max值=0;

遍历序列  找到更大值,就更新max

举例:找int[10] arr 的最大值

        //定义临时变量
        int max=0;
        //遍历,如果更大就更新max
        for(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通用,推荐 ✅适用于所有整数(包括负数)
序列的第一个元素非空序列需额外判空

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值