天天看点

Leetcode——1208、尽可能使字符串相等题目解题思路代码

题目

给你两个长度相同的字符串,s 和 t。

将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。

用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。

如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可以转化的最大长度。

如果 s 中没有子字符串可以转化成 t 中对应的子字符串,则返回 0。

解题思路

采用滑动窗口的思想

保证窗口只会扩张不会缩小即可,这样就无需max函数,其实使用max函数的话更像双指针的做法

当窗口内开销大于maxCost时将窗口左边界右移

其实就是相当于先判断左边界为0的最大窗口长度,在判断左边界为1的。。。以此类推

由于窗口不会缩小,最终窗口大小就是所需结果

代码

class Solution:
    def equalSubstring(self, s: str, t: str, maxCost: int) -> int:
        len_s = len(s)
        left, right = 0, 0
        total = 0
        while right < len_s:
            total += abs(ord(s[right])-ord(t[right]))
            if total > maxCost: #核心就是这里的if
                total -= abs(ord(s[left])-ord(t[left]))
                left += 1
            right += 1
        return right - left