leetcode盡可能使字符串相等 -- 滑動窗口

給你兩個長度相同的字符串,st。
s 中的第i個字符變到t中的第 i個字符需要 |s[i] - t[i]|的開銷(開銷可能為 0),也就是兩個字符的 ASCII 碼值的差的絕對值。
用于變更字符串的最大預算是maxCost。在轉(zhuǎn)化字符串時,總開銷應當小于等于該預算,這也意味著字符串的轉(zhuǎn)化可能是不完全的。
如果你可以將 s的子字符串轉(zhuǎn)化為它在 t中對應的子字符串,則返回可以轉(zhuǎn)化的最大長度。
如果 s 中沒有子字符串可以轉(zhuǎn)化成t中對應的子字符串,則返回 0。

示例1

輸入:s = "abcd", t = "bcdf", cost = 3
輸出:3
解釋:s 中的 "abc" 可以變?yōu)?"bcd"。開銷為 3,所以最大長度為 3。

示例2

輸入:s = "abcd", t = "cdef", cost = 3
輸出:1
解釋:s 中的任一字符要想變成 t 中對應的字符,其開銷都是 2。因此,最大長度為 1。

在做該題時,有兩點需要注意:

  1. 題中的子字符串指的是連續(xù)的最長子字符串。
  2. 題目有時間限制,不能直接暴力求解。

在使用滑動窗口時,考慮當窗口滑動到從ji 的區(qū)間時,已達到最大的cost了,當i往右移動了一個時,因為有maxCost的限制, 所以j在往右滑動時,需要滑動窗口值累計大于abs(s[i] - t[i])。以示例1為證,當i=2,j=0時,cost已達到3,這時i往右移動到3,abs(s[3]-t[3]) = 2,因此j需要移動到j=2的位置,才能使得當前滑動窗口滿足不大于maxCost的條件。這樣做也避免了從每一個字符都遍歷一次的計算。

class Solution {
public:
    int equalSubstring(string s, string t, int maxCost) {
        int length=s.length();
        int i=0;int j=i;
        int maxlength=0;
        int cost=maxCost;
        while (i!=length){
            if(abs(s[i]-t[i])>cost){
                if(i-j>maxlength) maxlength=i-j;
                cost=abs(s[j]-t[j])+cost;
                j++;
            }else {
                cost=cost-abs(s[i]-t[i]);
                i++;
            }
        }
        if(i-j>maxlength) maxlength=i-j;
        return maxlength;
        
    }
};

題目鏈接:https://leetcode-cn.com/problems/get-equal-substrings-within-budget

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,006評論 0 2
  • 字符串匹配KMP算法詳解 1. 引言 以前看過很多次KMP算法,一直覺得很有用,但都沒有搞明白,一方面是網(wǎng)上很少有...
    張晨輝Allen閱讀 2,622評論 0 3
  • 計算機二級C語言上機題庫(南開版) 1.m個人的成績存放在score數(shù)組中,請編寫函數(shù)fun,它的功能是:將低于平...
    MrSunbeam閱讀 6,606評論 1 42
  • 代碼遷移過程 1.首先確保你在目標服務(wù)器上已配置好ssh keys(當然,如果你使用的是http協(xié)議,可以忽略這一...
    夢07閱讀 4,077評論 0 1
  • 昨晚接通電話后的第一句,你一本正經(jīng)的說“我和你說個事情”,當時我心里還怕怕的,而后你馬上接了一句“明天要降溫了...
    尋找大米的蚊子閱讀 223評論 0 0

友情鏈接更多精彩內(nèi)容