• 424. 替换后的最长重复字符


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

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

    示例 1:

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

    示例 2:

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


    将任意位置上的字符替换成另外的字符,总共可最多替换 次的符合条件的子字符串
    <=>
    len(substr)-max(Counter(substr))<=k
    <=>
    r-l+1-maxcnt<=k

     py

    TLE 36/37

    class Solution:
        from collections import Counter
        def characterReplacement(self, s: str, k: int) -> int:
            l=r=0
            res=0
            while r<len(s):
                if len(s)-l<res:
                    break
                if r-l+1-max(Counter(s[l:r+1]).values())>k:
                    l+=1
                res=max(res,r-l+1)
                r+=1
            return res

    optimization,use Dictionary===>AC:

    class Solution:
        from collections import Counter
        import string
        def characterReplacement(self, s: str, k: int) -> int:
            l=r=0
            res=0
            maxchar=0
            cnt={}
            for char in ascii_uppercase:
                cnt[char]=0
            while r<len(s):
                if len(s)-l<res:
                    break
                cnt[s[r]]+=1
                maxchar=max(cnt.values())
                if r-l+1-maxchar>k:
                    cnt[s[l]]-=1
                    l+=1
                res=max(res,r-l+1)
                r+=1
            return res

    C++

    class Solution {
    public:
        int characterReplacement(string s, int k) {
            int l=0,r=0,maxchar=0,res=0;
            vector<int>cnt(26);
            while(r<s.size()){
                cnt[s[r]-'A']++;
                for(int i:cnt)maxchar=max(maxchar,i);
                if(r-l+1-maxchar>k){
                    cnt[s[l]-'A']--;
                    l++;
                }
                res=max(res,r-l+1);
                r++;
            }
            return res;
        }
    };
  • 相关阅读:
    Philosophy is systematic reflective thinking on life.
    HashMap与HashTable的区别、HashMap与HashSet的关系
    android Intent机制详解
    Android Parcelable理解与使用(对象序列化)
    Java并发编程:volatile关键字解析
    JavaEE 对象的串行化(Serialization)
    pytorch学习
    numpy的一些用法
    约瑟夫问题
    双向链表及其操作
  • 原文地址:https://www.cnblogs.com/xxxsans/p/14362146.html
Copyright © 2020-2023  润新知