首页 > 编程语言 >#yyds干货盘点# LeetCode程序员面试金典:至少有 K 个重复字符的最长子串

#yyds干货盘点# LeetCode程序员面试金典:至少有 K 个重复字符的最长子串

时间:2024-01-12 23:33:56浏览次数:38  
标签:子串 yyds cnt 示例 int 金典 最长 重复 LeetCode

题目

给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度。


如果不存在这样的子字符串,则返回 0。


 


示例 1:


输入:s = "aaabb", k = 3

输出:3

解释:最长子串为 "aaa" ,其中 'a' 重复了 3 次。

示例 2:


输入:s = "ababbc", k = 2

输出:5

解释:最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。

代码实现


class Solution {
    public int longestSubstring(String s, int k) {
        int n = s.length();
        return dfs(s, 0, n - 1, k);
    }

    public int dfs(String s, int l, int r, int k) {
        int[] cnt = new int[26];
        for (int i = l; i <= r; i++) {
            cnt[s.charAt(i) - 'a']++;
        }

        char split = 0;
        for (int i = 0; i < 26; i++) {
            if (cnt[i] > 0 && cnt[i] < k) {
                split = (char) (i + 'a');
                break;
            }
        }
        if (split == 0) {
            return r - l + 1;
        }

        int i = l;
        int ret = 0;
        while (i <= r) {
            while (i <= r && s.charAt(i) == split) {
                i++;
            }
            if (i > r) {
                break;
            }
            int start = i;
            while (i <= r && s.charAt(i) != split) {
                i++;
            }

            int length = dfs(s, start, i - 1, k);
            ret = Math.max(ret, length);
        }
        return ret;
    }
}


标签:子串,yyds,cnt,示例,int,金典,最长,重复,LeetCode
From: https://blog.51cto.com/u_13321676/9224647

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:01 矩阵
    题目给定一个由0和1组成的矩阵mat,请输出一个大小相同的矩阵,其中每一个格子是mat中对应位置元素到最近的0的距离。两个相邻元素间的距离为1。 示例1:输入:mat=[[0,0,0],[0,1,0],[0,0,0]]输出:[[0,0,0],[0,1,0],[0,0,0]]示例2:输入:mat=[[0,0,0],[0,1,0],[1,1,......
  • 【LeetCode 2142. 每辆车的乘客人数 I】乘客到站等车,车到站载客。MySQL用户变量编程完
    题目地址https://leetcode.cn/problems/the-number-of-passengers-in-each-bus-i/description/思路将所有关键时刻作为tick。(同一时刻车和人同时到,默认人在车前到)之后按照tick升序,使用MySQL用户变量编程完成计算逻辑。输出结果。代码withticksas(selectarrival_tim......
  • # yyds干货盘点 # pandas单独设一个新列,譬如从2023-11-1到2023-11-31怎么搞法?
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas日期数据生成的问题,问题如下:大佬们,如果我想单独设一个新列,譬如从2023-11-1到2023-11-31怎么搞法?或者这个数据有11行,可不可以自行设置成2023-11-15到2023-11-26这样子。二、实现过程后来【论草莓如何......
  • [LeetCode] 1363. Largest Multiple of Three 形成三的最大倍数
    Givenanarrayofdigits digits,return thelargestmultipleof three thatcanbeformedbyconcatenatingsomeofthegivendigitsin anyorder.Ifthereisnoanswerreturnanemptystring.Sincetheanswermaynotfitinanintegerdatatype,returnt......
  • #yyds干货盘点# LeetCode程序员面试金典:有序数组中的单一元素
    题目给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。请你找出并返回只出现一次的那个数。你设计的解决方案必须满足O(logn)时间复杂度和O(1)空间复杂度。 示例1:输入:nums=[1,1,2,3,3,4,4,8,8]输出:2示例2:输入:nums= [......
  • #yyds干货盘点# LeetCode程序员面试金典:UTF-8 编码验证
    题目给定一个表示数据的整数数组data,返回它是否为有效的UTF-8编码。UTF-8中的一个字符可能的长度为1到4字节,遵循以下的规则:对于1字节的字符,字节的第一位设为0,后面7位为这个符号的unicode码。对于n字节的字符(n>1),第一个字节的前n位都设为1,第n+1位......
  • # yyds干货盘点 # 盘点一个Python自动化办公的需求——一键批量插图到Excel指定单元格
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Python自动化办公的问题,问题如下:大佬们,昨天我在做插入excel图片的时候想起一个需求,好像挺难办的,也蛮现实的。比如每个图片是有名称的,但在做excel的时候,能不能按照excel中的名称调用图片插入。就像下面这样......
  • leetcode 11.盛最多水的容器
    leetcode11.盛最多水的容器第十一题:盛最多水的容器1.暴力枚举:会超时,但是做一些条件判断应该可以擦边过publicintmaxArea(int[]height){intmax_result=0;for(inti=0;i<height.length-1;i++){for(intj=i+1;j<height.length;j++......
  • # yyds干货盘点 # 盘点一个AI都无法解决的Python基础题目(下篇)
    大家好,我是皮皮。一、前言前几天在Python白银交流群【大侠】问了一个Pandas实战的问题,一起来看看吧。上一篇文章说到,看上去AI给的答案,似乎让【大侠】不满意,遂来白银交流群问问大佬们。这一篇文章,我们一起来看看其他大佬给的代码。二、实现过程前面的文章中,我们看到了【瑜亮老师】和......
  • # yyds干货盘点 # 想要获取某某查上面网址这个数据获取怎么获取呀?超好用工具分享!
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python网络爬虫的问题。问题如下:大佬们想要获取某某查上面网址这个数据获取怎么获取呀为什么返回的源码就这一点 有没有什么比较好上手的工具啥的页面图:网络爬虫结果:二、实现过程这里【黑科技......