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);
    }
};
posted @   _西瓜不甜  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示