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);
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通