Longest Substring with At Least K Repeating Characters
2016-09-06 13:20
489 查看
Find the length of the longest substring T of a given string (consists of lowercase letters only) such that every character in
T appears no less than k times.
Example 1:
Example 2:
这个题蛮力法肯定不行,思路是扫描出现次数小于k的字母,然后将它们作为分隔符,然后就将这些子串划分成原问题的子问题,递归求解。
public class Solution {
public int longestSubstring(String s, int k) {
if(k<=1){
return s.length();
}
int[] repeat=new int[26];
for(int i=0;i<s.length();i++){
repeat[s.charAt(i)-'a']++;
}
StringBuilder reg=new StringBuilder("");
boolean firstSplit=true;
for(int i=0;i<26;i++){
if(repeat[i]>0&&repeat[i]<k){
if(firstSplit){
reg.append((char)(i+'a'));
firstSplit=false;
}
else{
reg.append("|"+(char)(i+'a'));
}
}
}
if(reg.length()>0){
//说明有分隔符
String[] strs=s.split(reg.toString());
int max=0;
int tmpAns=0;
for(String str:strs){
tmpAns=longestSubstring(str, k);
if(tmpAns>max){
max=tmpAns;
}
}
return max;
}
else{
//没有分隔符,说明s中的每一个字符出现的次数都大于等于k
return s.length();
}
}
}
T appears no less than k times.
Example 1:
Input: s = "aaabb", k = 3 Output: 3 The longest substring is "aaa", as 'a' is repeated 3 times.
Example 2:
Input: s = "ababbc", k = 2 Output: 5 The longest substring is "ababb", as 'a' is repeated 2 times and 'b' is repeated 3 times.
这个题蛮力法肯定不行,思路是扫描出现次数小于k的字母,然后将它们作为分隔符,然后就将这些子串划分成原问题的子问题,递归求解。
public class Solution {
public int longestSubstring(String s, int k) {
if(k<=1){
return s.length();
}
int[] repeat=new int[26];
for(int i=0;i<s.length();i++){
repeat[s.charAt(i)-'a']++;
}
StringBuilder reg=new StringBuilder("");
boolean firstSplit=true;
for(int i=0;i<26;i++){
if(repeat[i]>0&&repeat[i]<k){
if(firstSplit){
reg.append((char)(i+'a'));
firstSplit=false;
}
else{
reg.append("|"+(char)(i+'a'));
}
}
}
if(reg.length()>0){
//说明有分隔符
String[] strs=s.split(reg.toString());
int max=0;
int tmpAns=0;
for(String str:strs){
tmpAns=longestSubstring(str, k);
if(tmpAns>max){
max=tmpAns;
}
}
return max;
}
else{
//没有分隔符,说明s中的每一个字符出现的次数都大于等于k
return s.length();
}
}
}
相关文章推荐
- LeetCode[395] Longest Substring with At Least K Repeating Characters
- LeetCode - 395 - Longest Substring with At Least K Repeating Characters
- Leetcode: Longest Substring with At Least K Repeating Characters
- Longest Substring with At Least K Repeating Characters问题及解法
- Longest Substring with At Least K Repeating Characters
- Longest Substring with At Least K Repeating Characters
- 395. Longest Substring with At Least K Repeating Characters
- 395. Longest Substring with At Least K Repeating Characters
- LeetCode赛题395----Longest Substring with At Least K Repeating Characters
- [LeetCode] Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串
- 395. Longest Substring with At Least K Repeating Characters
- Longest Substring with At Least K Repeating Characters
- 395. Longest Substring with At Least K Repeating Characters
- longest-substring-with-at-least-k-repeating-characters
- LeetCode-Longest Substring with At Least K Repeating Characters
- leetcode_[python/C++]_395_Longest Substring with At Least K Repeating Characters
- Longest Substring with At Least K Repeating Characters
- Longest Substring with At Least K Repeating Characters
- LeetCode 395 Longest Substring with At Least K Repeating Characters
- LeetCode No.395 Longest Substring with At Least K Repeating Characters