【Leetcode】滑动窗口

题目

  1. 尽可能使字符串相等

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

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

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

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

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

解题思路

  1. 双指针

代码

class Solution {
public:
    int equalSubstring(string s, string t, int maxCost) {
        int left=0, res=0;
        int n = s.size();
        int curCost = 0;
        for(int right=0;right<n;right++)
        {
            curCost += abs((s[right]-'A')-(t[right]-'A'));
            if (curCost>maxCost)
            {
                curCost -= abs((s[left]-'A')-(t[left]-'A')); 
                left++;
            }
            res = max(res, right-left+1);
        }
        return res;

    }
};

python

class Solution:
    def equalSubstring(self, s: str, t: str, maxCost: int) -> int:
        left=0
        n = len(s)
        curCost = 0
        res = 0
        for right in range(n):
            curCost += abs(ord(t[right])-ord(s[right]))
            print(curCost)
            if curCost>maxCost:
                curCost-=abs(ord(t[left])-ord(s[left]))
                left+=1
            else:
                res = max(res, right-left+1)
        return res




posted @   jucw  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示
主题色彩