LeetCode 1208(尽可能使字符串相等)讲解
目录
警告
本文最后更新于 2023-02-15,文中内容可能已过时。
Leetcode 1208 题
抱歉拖更了,原本应该周一更新的拖到了周三。
题干简述
给定:两个字符串s和t,一个整型变量 maxCost。
要求:尽量将字符串s
变成字符串t
,且变换字符的总开销不高于 maxCost。
函数返回值:变换后的字符串s
与字符串t
中的字符连续相同的最大长度。
开销计算公式:将 s 中的第 i 个字符变到 t 中的第 i 个字符需要
|s[i] - t[i]|
的开销,也就是两个字符的 ASCII 码值的差的绝对值。
题目详情:https://leetcode.cn/problems/get-equal-substrings-within-budget/
解题思路
这是一个求解「最大子区间」问题,同时有 maxCost 做限制,所以适合使用「滑动窗口算法」:
- 构建两个变量:left、right,
right-left
的距离就是窗口的大小。 - 将开销记为 sumCost,同时
right指针
向右移动。 - 若 sumCost <= maxCost,
left指针
不动,窗口长度变大。 - 若 sumCost > maxCost,
left指针
向右移动,窗口长度不变。 - 最终
right指针
扫描整个数组,窗口的长度就是题解。
图解算法
(diffSum 就是上文的 sumCost)
代码实现
|
|
复杂度
时间复杂度O(N),空间复杂度O(1)。
Buy me a coffee~
![室长 支付宝](/images/alipay.jpg)
![室长 微信](/images/wechatpay.jpg)