395. 至少有 K 个重复字符的最长子串 分治
给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度。
示例 1:
输入:s = "aaabb", k = 3
输出:3
解释:最长子串为 "aaa" ,其中 'a' 重复了 3 次。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-with-at-least-k-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
int longestSubstring(string s, int k) {
int n = s.size();
if (k <= 1) {
return n;
}
if (n == 0 || n < k) {
return 0;
}
vector <int> hash(128, 0);
for (char c : s) {
hash[c]++;
}
int i = 0;
while (i < n && hash[s[i]] >= k) {
i++;
}
if (i == n) {
return n;
}
int l = longestSubstring(s.substr(0, i), k);
while (i < n && hash[s[i]] < k) {
i++;
}
int r = longestSubstring(s.substr(i), k);
return max(l, r);
}
};

浙公网安备 33010602011771号