当前位置: 首页 > article >正文

力扣 395. 至少有 K 个重复字符的最长子串 递归

Problem: 395. 至少有 K 个重复字符的最长子串
在这里插入图片描述

🍻 递归

🧑‍🏫 参考题解
在这里插入图片描述

  • ⏰ 时间复杂度: O ( n ∗ 26 ∗ 26 ) O(n*26*26) O(n2626)
  • 🌍 空间复杂度: O ( 26 ∗ 26 ) O(26*26) O(2626)
class Solution {
    // 想象成一个黑盒函数
    // 输入:字符串 s,要求字符串中的每个字符至少出现 k 次
    // 输出:满足题目规则的最长字符串的长度
    public int longestSubstring(String s, int k) {
        if (s.length() < k) return 0; // 递归出口:不可能出现合法情况则结束
        HashMap<Character, Integer> counter = new HashMap();
        // 字符计数
        for (int i = 0; i < s.length(); i++) {
            counter.put(s.charAt(i), counter.getOrDefault(s.charAt(i), 0) + 1);
        }
        // 判断是否符合满足:至少每个字符出现 k 次的条件
        for (char c : counter.keySet()) {
            // 不符合条件则以当前字符进行分割成子字符串进行递归求解
            if (counter.get(c) < k) {
                int res = 0;
                for (String t : s.split(String.valueOf(c))) {
                    res = Math.max(res, longestSubstring(t, k));
                }
                return res;
            }
        }
        return s.length();
    }
}

http://www.kler.cn/a/548028.html

相关文章:

  • Java短信验证功能简单使用
  • 深度优化:如何用结构化提示词提升DeepSeek的响应质量
  • Ubuntu 上安装 Java 1.8
  • Unity3D 移动端 CPU 性能调优详解
  • SpringBoot3.3.0集成Knife4j4.5.0实战
  • nginx反向代理tomcat
  • linux概念详解
  • 前端构建工具
  • 聊聊 IP 地址和端口号的区别
  • 1219:马走日
  • 深入解析A2DP v1.4协议:蓝牙高质量音频传输的技术与实现
  • 上海正控ZK880 变频器基本操作
  • MongoDB 基本操作
  • 鸿蒙HarmonyOS NEXT开发:优化用户界面性能——组件复用(@Reusable装饰器)
  • 宏基传奇swift edge偶尔开机BIOS重置
  • Linux网络 | 多路转接Poll
  • NO.18十六届蓝桥杯备战|循环嵌套|乘法表|斐波那契|质数|水仙花数|(C++)
  • 深度学习-114-大语言模型应用之提示词指南实例DeepSeek使用手册(三)
  • docker搭建redis-cluster
  • FPGA简介|结构、组成和应用