classSolution{publicintlongestSubstring(String s,int k){returndfs(s,0, s.length()-1, k);}publicintdfs(String s,int left,int right,int k){if(left > right){return0;}int[] cnt =newint[26];for(int i = left; i <= right; i++){
cnt[s.charAt(i)-'a']++;}int res =0;int start = left;boolean flag =false;System.out.println(left+"+"+right);for(int i = left; i <= right; i++){if(cnt[s.charAt(i)-'a']< k){System.out.println(i);int p =dfs(s, start, i-1, k);if(p > res){
res = p;}
flag =true;
start = i +1;}}if(flag){int p =dfs(s, start, right, k);if(p > res){
res = p;}return res;}return right - left +1;}}
小黑python解法1:分治法
classSolution:deflongestSubstring(self, s:str, k:int)->int:
l =len(s)defsubstring(s,start,end):
counts ={}for c in s[start:end+1]:
counts[c]= counts.get(c,0)+1# 生成分割点
splits =[]for key in counts:if counts[key]< k:
splits.append(key)ifnot splits:return end - start +1
i = start
res =0while i <= end:while i <= end and s[i]in splits:
i +=1if i > end:break
start = i
while i <= end and s[i]notin splits:
i +=1
length = substring(s,start,i-1)
res =max(length,res)return res
return substring(s,0,l-1)
分治法
classSolution:deflongestSubstring(self, s:str, k:int)->int:
l =len(s)defsubString(start,end):
counts ={}# 记录子串中每一个字符的频率for c in s[start:end+1]:
counts[c]= counts.get(c,0)+1# 筛选出频率小于k的一个字符
split =Nonefor c in counts.keys():if counts[c]< k:
split = c
break# 所有字符符合要求,则returnifnot split:return end - start +1
i = start
ans =0while start <= end:while i <= end and s[i]== split:
i +=1if i > end:break
start = i
while i <= end and s[i]!= split:
i +=1
ans =max(ans,subString(start,i-1))return ans
return subString(0,l-1)