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:
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.
参考资料:here。
class Solution {
private:
string ori = "";
int ori_k = 0;
int helper(int start, int end) {
if (start > end) return 0;
vector<int> counts(26, 0);
for (int i = start; i <= end; i++) {
counts[ori[i] - 'a']++;
}
for (int i = start; i <= end; i++) {
if (counts[ori[i] - 'a'] < ori_k) {
return max(helper(start, i-1), helper(i+1, end));
}
}
return end - start+1;
}
public:
int longestSubstring(string s, int k) {
ori = s;
ori_k = k;
return helper(0, s.size()-1);
}
};