์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- codeup
- stratascratch
- gcp
- ๋ํธ์ฝ๋
- ํ์ด์ฌ์๊ณ ๋ฆฌ์ฆ
- heap
- Python
- Microsoft
- ์ฌ๋ผ์ด๋ฉ์๋์ฐ
- ํ์ด์ฌ๊ธฐ์ด100์
- GenAI
- two-pointer
- ๋ฆฌํธ์ฝ๋
- ์ฝ๋์
- nlp
- SQL
- GenerativeAI
- ๊ตฌ๊ธํต๋ฉ
- ๋ฆฟ์ฝ๋
- ํ์ด์ฌ
- medium
- slidingwindow
- dfs
- ์๊ณ ๋ฆฌ์ฆ
- ์์ฑํAI
- ํฌํฌ์ธํฐ
- Python3
- LeetCode
- sql์ฝํ
- ์์ฐ์ด์ฒ๋ฆฌ
Archives
- Today
- Total
Tech for good
[Neetcode 150/Sliding Window] Longest Repeating Character Replacement ๋ณธ๋ฌธ
IT/Computer Science
[Neetcode 150/Sliding Window] Longest Repeating Character Replacement
Diana Kang 2025. 2. 26. 23:57https://neetcode.io/problems/longest-repeating-substring-with-replacement
NeetCode
neetcode.io

๐ ํด๊ฒฐ ๋ฐฉ๋ฒ
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ์ฌ์ฉํ์ฌ left์ right ๋ ๊ฐ์ ํฌ์ธํฐ๋ก ์๋์ฐ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ค.
- ์๋์ฐ ๋ด์์ ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ ๋ฌธ์๋ฅผ ์ฐพ๊ณ , ๋๋จธ์ง ๋ฌธ์๋ค์ k๋ฒ ๋ณ๊ฒฝํ ์ ์๋์ง ํ์ธํ๋ค.
- ์๋์ฐ ํฌ๊ธฐ์์ ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ ๋ฌธ์ ๊ฐ์๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ฌธ์๊ฐ k๋ณด๋ค ํฌ๋ฉด left ํฌ์ธํฐ๋ฅผ ์ด๋ํ์ฌ ์๋์ฐ๋ฅผ ์ค์ธ๋ค.
- ์ต๋ ์๋์ฐ ํฌ๊ธฐ๋ฅผ ๊ฐฑ์ ํ๋ฉด์ ํ์์ ์งํํ๋ค.
class Solution:
def characterReplacement(self, s: str, k: int) -> int:
left = 0
max_count = 0 # ํ์ฌ ์๋์ฐ์์ ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ ๋ฌธ์ ๊ฐ์
max_length = 0
char_count = Counter() # ์๋์ฐ ๋ด ๋ฌธ์ ๊ฐ์ ์ ์ฅ
for right in range(len(s)):
char_count[s[right]] += 1
max_count = max(max_count, char_count[s[right]])
# (์๋์ฐ ํฌ๊ธฐ - ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ ๋ฌธ์ ๊ฐ์) > k ์ด๋ฉด left ์ด๋
if (right - left + 1) - max_count > k:
char_count[s[left]] -= 1
left += 1 # ์๋์ฐ ํฌ๊ธฐ ์ค์ด๊ธฐ
# ์ต๋ ๊ธธ์ด ๊ฐฑ์
max_length = max(max_length, right - left + 1)
return max_length
๐ก ์ฝ๋ ์ค๋ช
- char_count๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ์๋์ฐ ๋ด ๋ฌธ์์ ๊ฐ์๋ฅผ ์ ์ฅํ๋ค.
- max_count๋ ์๋์ฐ ๋ด์์ ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ ๋ฌธ์ ๊ฐ์๋ฅผ ์ ์งํ๋ค.
- (์๋์ฐ ํฌ๊ธฐ - max_count) > k ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด left ํฌ์ธํฐ๋ฅผ ์ด๋์์ผ ์๋์ฐ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ค.
- Case 1
- s =(AAA
BA)AAAA - s = (AAAAAA)AAA -> ์ด๋ฐ ๊ฒฝ์ฐ์ right ํฌ์ธํฐ๋ฅผ ๊ณ์ ์ฆ๊ฐ์ํฌ ์ ์์
- s = (AAAAAAAA)A -> ์ด๋ฐ ๊ฒฝ์ฐ์ right ํฌ์ธํฐ๋ฅผ ๊ณ์ ์ฆ๊ฐ์ํฌ ์ ์์
- ...
- s =(AAA
- Case 2
- s = AAABABCAA
- s = (AAA
BA)BCAA k =1-> 0 (์ด์ ๋ฐ๊ฟ ์ ์๋ ๋ฌธ์ ๊ฐ์๊ฐ 0๊ฐ ๋จ์๋ค๋ ๋ป) - s =(AAAAAB)CAA
- s = (AAAAAB)CAA -> ๋ ์ด์ ์ฐ์๋ ๋ฌธ์์ด ๋ง๋๋ ๊ฒ ๋ถ๊ฐ๋ฅ. ๋ฐ๋ผ์ left ํฌ์ธํฐ๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
- s = A(AAAA
B)CAA -> k =1-> 0 - s = A(AAAAA)CAA
- s = A(AAAAAC)AA -> k = 0. C๋ฅผ A๋ก ๋ฐ๊พธ๋ ๊ฒ ๋ถ๊ฐ๋ฅ. ๋ฐ๋ผ์ left ํฌ์ธํฐ๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
- s = AA(AAAB)CAA
- Case 1
- ์ต๋๊ฐ์ max_length์ ์ ์ฅํ๋ฉด์ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ๋ค.
๐ ์๊ฐ ๋ณต์ก๋ ๋ถ์
- ๊ฐ ๋ฌธ์๋ ์ต๋ ํ ๋ฒ์ฉ๋ง left์ right์ ์ํด ์ด๋
โ O(N) - Counter ์ฌ์ฉ์ O(1) ์ฐ์ฐ์ด๋ฏ๋ก ์ฑ๋ฅ์ ํฐ ์ํฅ์ ์ฃผ์ง ์์.
'IT > Computer Science' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Neetcode/Sliding Window] Permutation in String (0) | 2025.03.03 |
---|---|
[Leetcode/Sliding Window] 1652. Defuse the Bomb (0) | 2025.03.03 |
[Leetcode/Sliding Window] 1176. Diet Plan Performance (0) | 2025.02.26 |
[Leetcode/Sliding Window] 643. Maximum Average Subarray I (0) | 2025.02.25 |
[Leetcode/Sliding Window, HashMap] 219. Contains Duplicate II (0) | 2025.02.24 |