class Solution:
def equalSubstring(self, s: str, t: str, maxCost: int) -> int:
def dp(x): return abs(ord(s[x]) - ord(t[x]))
i, j, k, n, m = 0, 0, 0, len(s), 0
while i < n and j < n:
if dp(i) <= maxCost:
k = 1
m = dp(i)
break
i, j = i+1, j+1
while True:
j += 1
if j >= n:
break
m += dp(j)
if m > maxCost:
while m > maxCost and i < j:
m -= dp(i)
i += 1
if m <= maxCost and k < j - i + 1:
k = j - i + 1
return k
평범한 투포인터 + 부분합 체크.
dp를 배열로 만드는게 그 때 그 때 바꾸는 dp 함수보다 실행속도는 빠르다.
댓글 0