리트코드 424번
k번 변경을 통해 만들 수 있는 연속적으로 같은 가장 긴 문자열의 길이
class Solution:
def characterReplacement(self, s: str, k: int) -> int:
def maxInterval(alpa, head, tail, count):
# 처음 연속되는 문자 뛰기
while tail < len(s) and s[tail] == alpa:
tail += 1
# 다른 것들 최대한 바꾸기
while tail < len(s) and count:
if s[tail] != alpa:
count -= 1
tail += 1
# 마지막 연속되는 문자 뛰기
while tail < len(s) and s[tail] == alpa:
tail += 1
# 첫 원소기준 가장 큰 window길이
return tail - head
max = maxInterval(s[0],0,0,k)
head = 1
while head + max -1 < len(s):
freq = collections.Counter(s[head:head+max]).most_common(1)
count = max-freq[0][1]
if count <= k: # 최대길이가 같거나 길 가능성이 있을 때
max = maxInterval(freq[0][0], head, head+max, k-count)
head += 1
return max
class Solution:
def characterReplacement(self, s: str, k: int) -> int:
freqs = collections.defaultdict(int)
left, right = 0, 0
result = 0
while right < len(s): # 끝에 다다르면 끝
freqs[s[right]] += 1
diff = right - left + 1 - max(freqs.values()) # 최대빈도와 다른 문자수
if diff > k: # 가능성 아예 없는 경우
freqs[s[left]] -= 1
left += 1
right += 1
else: # 가능성 있는 경우
right += 1
result = right - left # right 옮긴곳이 알파벳 모르기 때문에 하나 적게
return result
슬라이딩 윈도우는 기준점 찾기도 어렵고 아직 여러모로 어떻게 행동단위를 잘라야할지 언제 어떤 것을 해줘야할지 어렵다...🥲