0%

1208. 尽可能使字符串相等

1. 滑动窗口

滑动窗口从左侧开始在满足cost的情况下向右滑动,记录最大窗口大小。
当cost不足以支持窗口继续向右扩展时,左侧窗口向右收缩1次,然后右侧窗口继续向右扩展。
时间O(n),空间O(1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
int equalSubstring(string s, string t, int maxCost) {
int n = s.length();
int left = 0, right = 0, maxDist = 0;

while (right < n) {
int cost = abs(s[right] - t[right]);
if (cost <= maxCost) {
maxCost -= cost;
right++;
maxDist = max(maxDist, right - left);
} else if (left < right) {
maxCost += abs(s[left] - t[left]);
left++;
} else if (left == right) {
left++;
right++;
}
}

return maxDist;
}
};