LeetCode:424.替换后的最长重复字符——中等

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

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

示例 1:

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

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

解题思路:
统计字符串s中所有的出现一次以上的字符,遍历判断,如果字符串长度小于k,那么返回值为字符串长度。如果字符串长度大于k,假设每个字符都只出现一次,那么最大长度就是k+1,利用Counter函数和items函数去掉只出现一次的字符,借助空列表,然后层层判断即可。

代码:

class Solution:
    def characterReplacement(self, s: str, k: int) -> int:
        n = len(s)
        if n <= k+1:
            return n
        res = k+1
        list1 = [c for c, v in Counter(s).items() if v > 1]
        for i in list1:
            list2 = []
            start = -1
            for j in range(n):
                if s[j] != i:
                    if k > 0:
                        if len(list2) >= k:
                            start = list2.pop(0)
                        list2.append(j)
                    else:
                        start = j
                res = max(res, j-start)
        return res

提交记录:
LeetCode:424.替换后的最长重复字符——中等_第1张图片

你可能感兴趣的:(每日一题,leetcode,python)