至少有K个重复字符的最长字串 分治法+递归

题目:

  

思路:

  分治法

  遍历字符串,将字符出现次数少于K次的,存入数组(数组下标为( 字符 -  'a' ),内容为出现次数

       作为分割条件,对字符串进行多条件切割

  递归字串,求max


 

(一)代码

  

class Solution {
    public int longestSubstring(String s, int k) {
        //因s中都是小写字母,定义一个26的数组
        int[] ss = new int[26];
        //数组存储对应字母出现的次数
        for(char ch : s.toCharArray()) ss[ch - 'a']++;
        //拼接低于k次的字母 用于分割s
        StringBuilder strBuilder = new StringBuilder();
        strBuilder.append("[");
        boolean flag = true;
        for(int i = 0 ; i < ss.length ; i++){
            if(ss[i] > 0 && ss[i] < k){
                strBuilder.append("//");
                strBuilder.append((char)(i+'a'));
                flag = false;
            }
        }
        strBuilder.append("]");
        if(flag) return s.length(); //递归出口

        //按照多条件分割字符串
        String[] splitFinal = s.split(strBuilder.toString());
        int res = 0;
        for(int i = 0 ; i < splitFinal.length ; i++){
            //递归
            res = Math.max(longestSubstring(splitFinal[i],k),res);
        }
        return res;
    }
}

 

   


 

 

 

          孤注一掷

  

 

posted @ 2021-09-30 11:17  朝才  阅读(82)  评论(0编辑  收藏  举报