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 함수보다 실행속도는 빠르다.