C++ 中获取预算内的相等子字符串
假设我们有两个长度相同的字符串 s 和 t。我们想要将 s 转换为 t。将 s 的第 i 个字符更改为 t 的第 i 个字符的成本为 |s[i] - t[i]|,即字符 ASCII 值之间的绝对差。我们还有一个整数 maxCost。我们必须找到 s 的子字符串的最大长度,该子字符串可以更改为与 t 的对应子字符串相同,且成本小于或等于 maxCost。
因此,如果输入类似于 s = “abcd” 和 t = “bcdf”,则 maxCost 将为 3,这是因为 s 中的 “abc” 可以转换为 “bcd”,其成本为 3,则输出将为 3。
为了解决这个问题,我们将遵循以下步骤:
j := 0,sum := 0 和 ret := 0
对于 i 从 0 到 s 和 t 的最小长度
sum 增加 |s[i] – t[i]|
当 sum > maxCost 时
sum 减去 |s[i] – t[i]|
j 增加 1
ret := ret 和 (i – j + 1) 的最大值
返回 ret
示例 (C++)
让我们看看下面的实现,以便更好地理解:
class Solution { public: int equalSubstring(string s, string t, int maxCost) { int j = 0; int sum = 0; int ret = 0; for(int i = 0; i < min((int)s.size(), (int)t.size()); i++){ sum += abs(s[i] - t[i]); while(sum > maxCost){ sum -= abs(s[j] - t[j]); j++; } ret = max(ret, i - j + 1); } return ret; } };
输入
"abcd" "bcdf" 3
输出
3
广告