10.长度第k长子串

给定一个字符串,只包含大写字母,求在包含同一字母的子串中
长度第K长的子串,相同字母只取最长的子串

输入:第一行 一个子串 1<len<=100 ,只包含大写字母
          第二行为k的值

输出:输出连续出现次数第k多的字母的次数

例子:
输入
AABAAA
2
输出
1
同一字母连续出现最多的A 3次
第二多2次 但A出现连续3次

输入

AAAAHHHBBCDHHHH
3

输出
2

如果子串中只包含同一字母的子串数小于k,则输出-1

 

点击查看代码

import java.util.*;

public class Demo10 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String[] split = sc.nextLine().split("");
        int k = Integer.parseInt(sc.nextLine());

        HashMap<String,Integer> map = new HashMap<>();
        String temp = split[0];
        int count = 1;
        map.put(temp, count);

        //核心处理代码
        for(int i = 1; i < split.length; i++){
            temp = split[i];
            if(temp.equals(split[i - 1])) count++;
            else count = 1;
            map.put(temp, map.containsKey(temp) ?
                          map.get(temp) > count ? map.get(temp) : count
                        : count);
        }

        Integer[] ints = new Integer[map.values().size()];
        map.values().toArray(ints);
        Arrays.sort(ints); //默认是升序排序

        System.out.println(ints[ints.length - k]);
    }
}

 

核心代码那一块蛮有意思的,相同字母只取最长的子串!

 

posted @ 2022-03-25 10:34  Jukim  阅读(668)  评论(0编辑  收藏  举报