【LeetCode】424. 替换后的最长重复字符 结题报告 (python)

原题地址:https://leetcode-cn.com/problems/longest-repeating-character-replacement/

题目描述:

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

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

示例 1:

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

输出:
4

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

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

输出:
4

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

 

解题方案:

好像是一道新的体型,采用了滑动窗口的方法,也可以说是双指针的方法:start和end指针。

class Solution:
    def characterReplacement(self, s: str, k: int) -> int:
        from collections import defaultdict
        d = defaultdict(int)
        l = 0
        maxn = 0
        for r in range(len(s)):
            d[s[r]] += 1
            maxn = max(maxn, d[s[r]])
            if r - l + 1 > maxn + k:  # bc it is for loop, r += 1 is later than if clause
                d[s[l]] -= 1
                l += 1
        return len(s) - l
class Solution:
    def characterReplacement(self, s: str, k: int) -> int:
        res, count, _max = 0, {}, 0  # 分别维护答案、窗口内各字母计数和计数的最大值
        for i in range(len(s)):
            count[s[i]] = count.get(s[i], 0) + 1  # 当前字母计数+1
            _max = max(_max, count[s[i]])  # 字符出现次数最多的个数
            if res - _max < k:  # 窗口内除出现最多的字母外其它字母总个数

 

你可能感兴趣的:(LeetCode)