1208. Get Equal Substrings Within Budget

# 1208. Get Equal Substrings Within Budget#

## 题目 #

You are given two strings `s` and `t` of the same length. You want to change `s` to `t`. Changing the `i`-th character of `s` to `i`-th character of `t` costs `|s[i] - t[i]|` that is, the absolute difference between the ASCII values of the characters.

You are also given an integer `maxCost`.

Return the maximum length of a substring of `s` that can be changed to be the same as the corresponding substring of `t`with a cost less than or equal to `maxCost`.

If there is no substring from `s` that can be changed to its corresponding substring from `t`, return `0`.

Example 1:

``````Input: s = "abcd", t = "bcdf", maxCost = 3
Output: 3
Explanation: "abc" of s can change to "bcd". That costs 3, so the maximum length is 3.
``````

Example 2:

``````Input: s = "abcd", t = "cdef", maxCost = 3
Output: 1
Explanation: Each character in s costs 2 to change to charactor in t, so the maximum length is 1.
``````

Example 3:

``````Input: s = "abcd", t = "acde", maxCost = 0
Output: 1
Explanation: You can't make any change, so the maximum length is 1.
``````

Constraints:

• `1 <= s.length, t.length <= 10^5`
• `0 <= maxCost <= 10^6`
• `s` and `t` only contain lower case English letters.

## 题目大意 #

• 1 <= s.length, t.length <= 10^5
• 0 <= maxCost <= 10^6
• s 和 t 都只含小写英文字母。

## 解题思路 #

• 给出 2 个字符串 `s``t` 和一个“预算”，要求把“预算”尽可能的花完，`s` 中最多连续有几个字母能变成 `t` 中的字母。“预算”的定义是：|s[i] - t[i]| 。
• 这一题是滑动窗口的题目，滑动窗口右边界每移动一格，就减少一定的预算，直到预算不能减少，再移动滑动窗口的左边界，这个时候注意要把预算还原回去。当整个窗口把字符 `s``t` 都滑动完了的时候，取出滑动过程中窗口的最大值即为结果。

## 代码 #

``````
package leetcode

func equalSubstring(s string, t string, maxCost int) int {
left, right, res := 0, -1, 0
for left < len(s) {
if right+1 < len(s) && maxCost-abs(int(s[right+1]-'a')-int(t[right+1]-'a')) >= 0 {
right++
maxCost -= abs(int(s[right]-'a') - int(t[right]-'a'))
} else {
res = max(res, right-left+1)
maxCost += abs(int(s[left]-'a') - int(t[left]-'a'))
left++
}
}
return res
}

``````

Apr 8, 2023