码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【C语言刷LeetCode】395. 至少有 K 个重复字符的最长子串(M)


    【

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

    示例 1:

    输入:s = "aaabb", k = 3
    输出:3
    解释:最长子串为 "aaa" ,其中 'a' 重复了 3 次。
    示例 2:

    输入:s = "ababbc", k = 2
    输出:5
    解释:最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。
     

    提示:

    1 <= s.length <= 104
    s 仅由小写英文字母组成
    1 <= k <= 105

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/longest-substring-with-at-least-k-repeating-characters
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    】

    这道题有些意思,需要用到分治法:

    计算所有字符的出现次数cnt[26];
    根据1<=cnt[i] 根据ch将字符串拆分, 递归处理拆分后的字符串;
    递归终止条件, 字符串中没有满足1<=cnt[i]

    1. int retmax;
    2. void Dfs(char *s, int l, int r, int k)
    3. {
    4. int i;
    5. int cnt[26] = {0};
    6. for (i = l; i <= r; i++) {
    7. cnt[s[i] - 'a']++;
    8. }
    9. char sqilt = 0;
    10. for (i = l; i <= r; i++) {
    11. if (cnt[s[i] - 'a'] < k && cnt[s[i] - 'a'] != 0) { // 这个字符出现次数小于k
    12. sqilt = s[i];
    13. break;
    14. }
    15. }
    16. if (sqilt == 0) { // 每一个字符出现次数都不少于k
    17. retmax = fmax(retmax, r - l + 1);
    18. return;
    19. }
    20. while (l <= r) {
    21. while (l <= r && s[l] == sqilt) { // 找第一个不等于sqilt的位置
    22. l++;
    23. }
    24. if (l > r) { // 这段字符里都是 sqilt,不可能有符合的字符串了
    25. return;
    26. }
    27. int start = l; // 记录这个位置
    28. while(l <= r && s[l] != sqilt) { // 找到第一个等于sqilt的位置
    29. l++;
    30. } // 这次while循环完,不用判断 l > r,因为最终都是要l-1
    31. Dfs(s, start, l - 1, k);
    32. l++;
    33. }
    34. }
    35. int longestSubstring(char * s, int k){
    36. int len = strlen(s);
    37. retmax = 0;
    38. Dfs(s, 0, len - 1, k);
    39. return retmax;
    40. }

  • 相关阅读:
    Python常见面试题分享,面试题中的No.1!
    【每日一句】只出现一次的数
    软件测试人在深圳有哪些值得去的互联网公司【软件测试人员专供版】
    js中findIndex()、find()、indexOf()、includes()方法
    43、Flink 的 Window Join 详解
    深度学习基础宝典---激活函数、Batch Size、归一化
    使用 Nginx 实现 HTTPS 网站设置
    鉴源实验室 | AUTOSAR SecOC:保障汽车通信的安全
    day8-机器学习模型评估
    使用 WSLg 的 vGPU 硬件加速新特性创建重度混合生产环境
  • 原文地址:https://blog.csdn.net/jin615567975/article/details/126615614
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号