ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

leetcode---395.至少有K个重复字符的最长子串

2021-04-22 21:32:42  阅读:170  来源: 互联网

标签:子串 题意 递归 复杂度 最长 --- 395 字符串 leetcode


题目描述

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

示例

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

提示

  • s 仅由小写英文字母组成

解题思路

1.递归

递归的终止条件:如果字符串 s 的长度小于 k,那么一定不存在满足题意的子字符串,返回0.
调用递归:如果一个字符 c 在 s 中出现的次数少于 k 次,那么 s 中所有包含 c 的子字符串都不满足题意。所以,用改在 s 的所有不包含 c 的子字符串中继续寻找结果,把 s 按照 c 分割,得到很多子字符串(接下来就是要求这些子字符串的最长的满足题意的子字符串),将子字符串组为新的 s 送入函数去判断。

代码

class Solution:
    def longestSubstring(self, s: str, k: int) -> int:
        if len(s)<k:
            return 0

        for c in set(s):
            if s.count(c) < k:
                return max(self.longestSubstring(t,k) for t in s.split(c))

        return len(s)

复杂度

  • 时间复杂度:\(O(n*26^2)\)
  • 空间复杂度:\(O(26^2)\)

标签:子串,题意,递归,复杂度,最长,---,395,字符串,leetcode
来源: https://www.cnblogs.com/kanka/p/14691584.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有