滑動視窗法 1208 盡可能使字串相等

2021-10-21 19:59:12 字數 1112 閱讀 1465

1208. 盡可能使字串相等

給你兩個長度相同的字串,s 和 t。

將 s 中的第 i 個字元變到 t 中的第 i 個字元需要 |s[i] - t[i]| 的開銷(開銷可能為 0),也就是兩個字元的 ascii 碼值的差的絕對值。

用於變更字串的最大預算是 maxcost。在轉化字串時,總開銷應當小於等於該預算,這也意味著字串的轉化可能是不完全的。

如果你可以將 s 的子字串轉化為它在 t 中對應的子字串,則返回可以轉化的最大長度。

如果 s 中沒有子字串可以轉化成 t 中對應的子字串,則返回 0。

示例 1:

輸入:s = 「abcd」, t = 「bcdf」, maxcost = 3

輸出:3

解釋:s 中的 「abc」 可以變為 「bcd」。開銷為 3,所以最大長度為 3。

示例 2:

輸入:s = 「abcd」, t = 「cdef」, maxcost = 3

輸出:1

解釋:s 中的任一字元要想變成 t 中對應的字元,其開銷都是 2。因此,最大長度為 1。

示例 3:

輸入:s = 「abcd」, t = 「acde」, maxcost = 0

輸出:1

解釋:a -> a, cost = 0,字串未發生變化,所以最大長度為 1。

思路

使用雙指標,維護頭指標start,尾指標end,和指標區間總和sum。

而要使子陣列長度盡可能大,就需要start盡量小,end盡量大

步驟

每次我們令尾指標end+1,並使sum加上當前end指標處兩字元的差值(絕對值);

若相加後,此時sum<=maxcost,說明這個區間start-end符合條件。此時相當於視窗變長;

否則,令頭指標start+1,並使sun減去之前start指標處兩字元的差值(絕對值)。此時相當於視窗右移;

直到end遍歷到字串尾部,結果就為end-start。

class

solution

end++;}

return end - start;

}}

1208 盡可能使字串相等

如題 不愧是滑動視窗周啊 給你兩個長度相同的字串,s和t。將s中的第i個字元變到t中的第i個字元需要 s i t i 的開銷 開銷可能為0 也就是兩個字元的ascii 碼值的差的絕對值。用於變更字串的最大預算是maxcost。在轉化字串時,總開銷應當小於等於該預算,這也意味著字串的轉化可能是不完全的...

1208 盡可能使字串相等

給你兩個長度相同的字串,s和t。將s中的第i個字元變到t中的第i個字元需要 s i t i 的開銷 開銷可能為 0 也就是兩個字元的 ascii 碼值的差的絕對值。用於變更字串的最大預算是maxcost。在轉化字串時,總開銷應當小於等於該預算,這也意味著字串的轉化可能是不完全的。如果你可以將s的子字...

1208 盡可能使字串相等 滑動窗判斷

難度中等 給你兩個長度相同的字串,s和t。將s中的第i個字元變到t中的第i個字元需要 s i t i 的開銷 開銷可能為 0 也就是兩個字元的 ascii 碼值的差的絕對值。用於變更字串的最大預算是maxcost。在轉化字串時,總開銷應當小於等於該預算,這也意味著字串的轉化可能是不完全的。如果你可以...