【python-leetcode424-滑动窗口法】替换后的最长重复字符

【python-leetcode424-滑动窗口法】替换后的最长重复字符,第1张

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

问题描述:

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

注意:
字符串长度 和 k 不会超过 104。

示例 1:

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

输出:
4

解释:
用两个'A'替换为两个'B',反之亦然。
示例 2:

输入:
s = "AABABBA",k = 1

输出:
4

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

暴力法的滑动窗口就不写了,直接看升级版的。

具体思路看源码中的注释。

class Solution:    def characterReplacement(self,s: str,k: int) -> int:        from collections import defaultdict        hash = defaultdict(int) #用于存储字符出现的次数        start = 0 左窗口        maxCount = 0 用于存储当前出现次数最多的字符的次数        res = 0 存储结果        for i in range(len(s)): i表示右窗口            遍历到一个字符,在hash中的次数就加一            hash[s[i]] += 1             当前窗口中元素最多的字符的次数            maxCount = max(maxCount,hash[s[i]])             当前窗口里的字符的个数减去当前窗口里字符出现的最大值如果大于k,             说明修改k次不能满足条件了,则在左端窗口处的字符值-1,同时往前进一位            while i - start + 1 - maxCount > k: 这里其实可以用if                hash[s[start]] -= 1                maxCount = max(maxCount,hash[s[start]]) 更新一下maxCount,这里其实也可省略掉。                start += 1                            res = max(i - start + 1,res)        return res

结果:

总结

以上是内存溢出为你收集整理的【python-leetcode424-滑动窗口法】替换后的最长重复字符全部内容,希望文章能够帮你解决【python-leetcode424-滑动窗口法】替换后的最长重复字符所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1190064.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存