LeetCode每日一题,1208. Get Equal Substrings Within Budget
先看题目描述
大意就是给定两个字符串 s 和 t,将 s 中的字符 s[i] 替换成 t 中的字符 t[i] 需要的开销是两个字符的 ASCII 码值之差的绝对值,我们要保证替换字符的开销总和小于等于 maxCost,问 s 可以替换的子串最大长度是多少
算法和思路
滑动窗口
我们先进行预处理,用一个数组 cost 维护替换字符的开销,cost[i] 就表示将字符 s[i] 替换成 t[i] 需要的开销,我们用 cur 表示当前滑动窗口内替换字符的总开销,left 表示滑动窗口的左边界(闭区间),right 表示滑动窗口的右边界(开区间),每次通过判断 cur 是否大于 maxCost 来决定将滑动窗口移动还是扩张
- 若 cur <= maxCost,说明此时滑动窗口的字符均可以替换,则将 right 右移,扩张当前滑动窗口
- 若 cur > maxCost,则说明此时滑动窗口内的字符不可以全部替换,则将 left 和 right 加 1,将滑动窗口右移
最后返回滑动窗口的长度即可
算法源码
滑动窗口
1 | class Solution { |