NeetCode 150 / Sliding Window
MediumSliding WindowO(n)
ভিডিওতে দেখো — YouTube @algonur_com

কোড

Python
def characterReplacement(s: str, k: int) -> int:
    count = {}
    l = best = maxCount = 0
    for r, c in enumerate(s):
        count[c] = count.get(c, 0) + 1
        maxCount = max(maxCount, count[c])
        if (r - l + 1) - maxCount > k:
            count[s[l]] -= 1
            l += 1
        best = max(best, r - l + 1)
    return best
Java
public int characterReplacement(String s, int k) {
    int[] cnt = new int[26]; int l=0, best=0, maxCnt=0;
    for (int r=0; r<s.length(); r++) {
        maxCnt = Math.max(maxCnt, ++cnt[s.charAt(r)-'A']);
        if (r-l+1-maxCnt > k) cnt[s.charAt(l++)-'A']--;
        best = Math.max(best, r-l+1);
    }
    return best;
}
Kotlin
fun characterReplacement(s: String, k: Int): Int {
    val cnt = IntArray(26); var l=0; var best=0; var maxCnt=0
    for (r in s.indices) {
        maxCnt = maxOf(maxCnt, ++cnt[s[r]-'A'])
        if (r-l+1-maxCnt > k) cnt[s[l++]-'A']--
        best = maxOf(best, r-l+1)
    }
    return best
}
C++
int characterReplacement(string s, int k) {
    int cnt[26]={}, l=0, best=0, maxCnt=0;
    for (int r=0; r<s.size(); r++) {
        maxCnt = max(maxCnt, ++cnt[s[r]-'A']);
        if (r-l+1-maxCnt > k) cnt[s[l++]-'A']--;
        best = max(best, r-l+1);
    }
    return best;
}
C
int characterReplacement(char* s, int k) {
    int cnt[26]={0},l=0,best=0,maxCnt=0,n=strlen(s);
    for(int r=0;r<n;r++){
        int c=s[r]-'A'; cnt[c]++;
        if(cnt[c]>maxCnt)maxCnt=cnt[c];
        if(r-l+1-maxCnt>k) cnt[s[l++]-'A']--;
        if(r-l+1>best)best=r-l+1;
    }
    return best;
}

জটিলতা

O(n)
সময় — অ্যারেটা একবারই ঘুরি, ম্যাপে খোঁজা O(1)।
O(1)
জায়গা — সবচেয়ে খারাপ ক্ষেত্রে সব সংখ্যা ম্যাপে থাকে।
আগের সমস্যা← Longest Substring Without Repeating Charactersপরের সমস্যাPermutation in String →