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.
转
public class Solution {
public int longestSubstring(String s, int k) {
return dc(s, 0, s.length(), k);
}
public int dc(String s, int start, int end, int k) {
if (end - start < k) return 0;
int[] cnt = new int[26];
for (int i = start; i < end; i++) {
cnt[s.charAt(i) - 'a']++;
}
for (int i = start; i < end; i++) {
if (cnt[s.charAt(i) - 'a'] < k) {
return Math.max(dc(s, start, i, k), dc(s, i + 1, end, k));
}
}
return end - start;
}
}
最长重复子串算法
本文介绍了一种寻找字符串中每个字符至少重复k次的最长子串的算法。通过递归划分,该算法能高效地找到满足条件的最长子串。示例展示了如何使用此方法解决具体问题。
685

被折叠的 条评论
为什么被折叠?



