From 5cac46a0bf5e49880e8c778f7041801d6890c2d5 Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Tue, 25 Aug 2026 14:24:39 -0400 Subject: [PATCH] =?UTF-8?q?feat(work):=20add=20longest=E2=80=91repeating?= =?UTF-8?q?=E2=80=91character=E2=80=91replacement=20solution=20and=20renam?= =?UTF-8?q?e=20variable=20in=20longest=E2=80=91substring=20solution?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...-substring-without-repeating-characters.py | 8 +-- ...longest-repeating-character-replacement.py | 60 +++++++++++++++++++ 2 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 work/Medium/Hash Table/424.longest-repeating-character-replacement.py diff --git a/work/Medium/Hash Table/3.longest-substring-without-repeating-characters.py b/work/Medium/Hash Table/3.longest-substring-without-repeating-characters.py index 0013fac..0a7df0a 100644 --- a/work/Medium/Hash Table/3.longest-substring-without-repeating-characters.py +++ b/work/Medium/Hash Table/3.longest-substring-without-repeating-characters.py @@ -45,12 +45,12 @@ class Solution: def lengthOfLongestSubstring(self, s: str) -> int: left = 0 ans = 0 - seen = set() + window = set() for right, c in enumerate(s): - while c in seen: - seen.remove(s[left]) + while c in window: + window.remove(s[left]) left += 1 - seen.add(c) + window.add(c) ans = max(ans, right - left + 1) return ans diff --git a/work/Medium/Hash Table/424.longest-repeating-character-replacement.py b/work/Medium/Hash Table/424.longest-repeating-character-replacement.py new file mode 100644 index 0000000..6cf32d8 --- /dev/null +++ b/work/Medium/Hash Table/424.longest-repeating-character-replacement.py @@ -0,0 +1,60 @@ +""" +424. Longest Repeating Character Replacement +Difficulty: Medium +https://leetcode.com/problems/longest-repeating-character-replacement/ + +────────────────────────────────────────────────── + +You are given a string s and an integer k. You can choose any +character of the string and change it to any other uppercase English +character. You can perform this operation at most k times. + +Return the length of the longest substring containing the same letter +you can get after performing the above operations. + + + +Example 1: + +Input: s = "ABAB", k = 2 +Output: 4 +Explanation: Replace the two 'A's with two 'B's or vice versa. + +Example 2: + +Input: s = "AABABBA", k = 1 +Output: 4 +Explanation: Replace the one 'A' in the middle with 'B' and form +"AABBBBA". +The substring "BBBB" has the longest repeating letters, which is 4. +There may exists other ways to achieve this answer too. + + + +Constraints: + + • 1 <= s.length <= 10^5 + + • s consists of only uppercase English letters. + + • 0 <= k <= s.length +""" + + +class Solution: + def characterReplacement(self, s: str, k: int) -> int: + count = {} + res = 0 + + l = 0 + maxF = 0 + for r, c in enumerate(s): + count[c] = 1 + count.get(c, 0) + maxF = max(maxF, count[c]) + + while (r - l + 1) - maxF > k: + count[s[l]] -= 1 + l += 1 + + res = max(res, r - l + 1) + return res