ETH官方钱包

前往
大廳
主題

LeetCode - 1208. Get Equal Substrings Within Budget 解題心得

Not In My Back Yard | 2024-07-03 12:00:01 | 巴幣 0 | 人氣 53

題目連結:


題目意譯:
你被給定兩個相同長度的字串 s 和 t,以及一個整數 maxCost。

你想要把 s 變成 t。把 s 的第 i 個字元變成 t 的第 i 個字元的成本會是 |s[i] - t[i]|(即兩個字元 ASCII 數值之絕對差值)。

回傳在總成本小於等於 maxCost 的情況下,s 中可以變成與 t 相對應位置的字元一致之最長子字串之長度為何。如果不存在著任何子字串可以變成與 t 對應位置一樣,則回傳 0。

限制:
1 ≦ s.length ≦ 10 ^ 5
t.length == s.length
0 ≦ maxCost ≦ 10 ^ 6
s 和 t 只由小寫英文字母組成。



範例測資:
範例 1:
輸入: s = "abcd", t = "bcdf", maxCost = 3
輸出: 3
解釋: s 中的 "abc" 可以變成 "bcd"。
成本是 3,所以最長長度為 3。

範例 2:
輸入: s = "abcd", t = "cdef", maxCost = 3
輸出: 1
解釋: 每一個字元都需要 2 單位成本才能變成 t 中的對應字元,所以最長長度為 1。

範例 3:
輸入: s = "abcd", t = "acde", maxCost = 0
輸出: 1
解釋: 你做不了任何變化,所以最長長度為 1。


解題思維:
典型的滑動視窗(Sliding Window)之題型,如這題這題。也就是說對於每一個位置 s[i],看可以「往左」延伸到何處(設其為 s[j])使得 s[j] ~ s[i] 變成 t[j] ~ t[i] 的成本不超過 maxCost。

因此以 s[i] 作為結尾且所需成本不超過 maxCost 的子字串長度即為 i - j + 1(除非連 s[i] 變成 t[i] 都做不到,此時長度為 0)。

把所有可能的結尾之結果取最大值即為所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作