题目:
思路:
分治法
遍历字符串,将字符出现次数少于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; } }
孤注一掷