leetcode_424. 替换后的最长重复字符

目录

一、题目内容

二、解题思路

三、代码


一、题目内容

给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。

注意:字符串长度 和 k 不会超过 10^4。

示例 1:

输入:s = "ABAB", k = 2
输出:4
解释:用两个'A'替换为两个'B',反之亦然。

示例 2:

输入:s = "AABABBA", k = 1
输出:4
解释:
将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。
子串 "BBBB" 有最长重复字母, 答案为 4。

二、解题思路

滑动窗口,记录滑动窗口里最大重复字符的个数,如果当前窗口长度 - 最大重复字符数量 > k,即当前窗口中非重复字符的个数大于k,则窗口左边边界往右挪最左边的字符计数减1。每次比较长度大小即可。

三、代码

class Solution:
    def characterReplacement(self, s: str, k: int) -> int:
        character_counts = [0 for _ in range(26)]
        left = 0
        ans = 0
        max_character_count = 0
        for right in range(len(s)):
            # 统计滑动窗口里的字母字符的个数
            character_counts[ord(s[right]) - ord('A')] += 1
            # 窗口中的最大重复字符数量
            max_character_count = max(max_character_count, character_counts[ord(s[right]) - ord('A')])
            # 当前窗口长度 - 最大重复字符数量 > k:
            # 即当前窗口中非重复字符的个数大于k,则窗口左边边界往右挪,最左边的字符计数减1
            while right - left + 1 - max_character_count > k:
                character_counts[ord(s[left]) - ord('A')] -= 1
                left += 1
            # 比较长度大小
            ans = max(ans, right - left + 1)
        return ans


if __name__ == '__main__':
    ss = Solution()
    s = "AABABBA"
    k = 1
    ans = ss.characterReplacement(s, k)
    print(ans)
悲恋花丶无心之人 CSDN认证博客专家 深度学习 神经网络 Pytorch
计算机视觉在读研究生,熟悉Pytorch,MXNet,TensorFlow,Keras等深度学习框架,主要涉及的领域有目标检测,语义分割,超分辨率重建,行人重识别等。
个人GitHub网址为:https://github.com/nickhuang1996
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页
实付 29.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值