zoukankan      html  css  js  c++  java
  • 1208. 尽可能使字符串相等(双指针、滑动窗口)

    一、题目描述

    给你两个长度相同的字符串,s 和 t。
    将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。
    用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。
    如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可以转化的最大长度。
    如果 s 中没有子字符串可以转化成 t 中对应的子字符串,则返回 0。
    示例 1:
    输入:s = “abcd”, t = “bcdf”, cost = 3
    输出:3
    解释:s 中的 “abc” 可以变为 “bcd”。开销为 3,所以最大长度为 3。
    示例 2:
    输入:s = “abcd”, t = “cdef”, cost = 3
    输出:1
    解释:s 中的任一字符要想变成 t 中对应的字符,其开销都是 2。因此,最大长度为 1。
    示例 3:
    输入:s = “abcd”, t = “acde”, cost = 0
    输出:1
    解释:你无法作出任何改动,所以最大长度为 1。

    难度:中等
    二、题解
    方法一:滑动窗口
    保证窗口内的maxCost值大于等于零,如果小于0,则需要left++,但是要注意的是左指针向右移动之前要将left对应的cost恢复。
    class Solution {
    public:
        int equalSubstring(string s, string t, int maxCost) {
            int n = min(s.size(),t.size());
            int left = 0;
            int right = 0;
            int ans = 0;
            while(right<n){
                maxCost -= abs(s[right]-t[right]);
                if(maxCost>=0){
                    ans = max(ans,right-left+1);
                }else{
                    maxCost += abs(s[left]-t[left]);
                    left++;
                }
                right++;
            }
            return ans;
        }
    };

    优化:

    class Solution {
    public:
        int equalSubstring(string s, string t, int maxCost) {
            int n = min(s.size(),t.size());
            int left = 0;
            int right = 0;
            while(right<n){
                maxCost -= abs(s[right]-t[right]);
                if(maxCost<0){
                    maxCost += abs(s[left]-t[left]);
                    left++;
                }
                right++;
            }
            return right - left;
        }
    };

  • 相关阅读:
    sqlParameter的两种写法 以及存储过程还有sql语句(防注入)
    SqlServer2005 SQL Server 版本变更检查 警告
    禁用自带防火墙
    sql分页
    每个程序员都必须遵守的编程原则
    在PDA设备上安装SQL Server Compact
    Mcrosoft SQL Server 自定义函数
    程序员人生之路(转)
    在windows 7 上为 sqlserver 2008 启用远程访问
    在PDA设备上安装和部署 SQL Server Compac 3.5(官方版)
  • 原文地址:https://www.cnblogs.com/ttzz/p/14376919.html
Copyright © 2011-2022 走看看