leetCode 1208 盡可能使字串相等

2021-10-19 04:32:20 字數 2655 閱讀 4841

字串s與t每乙個對應字元的開銷為∣s[

i]−s

[t]∣

| s[i] - s[t] |

∣s[i]−

s[t]

∣因此可以構建乙個diff陣列其中dif

f[i]

=∣s[

i]−s

[t]∣

diff[i] = | s[i]-s[t] |

diff[i

]=∣s

[i]−

s[t]

∣,這樣問題就轉化成了在diff陣列中求區間和不超過maxcost的最長區間長度。

使用雙指標維護乙個邏輯上的視窗,不斷移動右指標,使用乙個變數sum維護當前視窗內的和,當sum > maxcost時更新sum並移動左指標和sum,最後不斷跟新答案res即可。

class

solution

int left =

0, right =0;

int sum =

0, res =0;

while

(right < n)

res = math.

max(res, right - left);}

return res;

}}

快速求得乙個連續區間的和也可以使用字首和演算法,更具diff陣列得到乙個字首和陣列sum

int

sum =

newint

[n +1]

;for

(int i =

1; i < n +

1; i++

)

我們想要找到區間 [i,

j]滿足

sum[

j+1]

−sum

[i]<=m

axco

st[i, j] 滿足sum[j + 1] - sum[i] <= maxcost

[i,j]滿

足sum

[j+1

]−su

m[i]

<=m

axco

st, 我們已經知道了區間的和要小於maxcost 所以

1

<=i

<=n

時,[0

,i−1

]區間內

的和就是

sum[

i]我們

需要找到

乙個開始

下標st

art,

使得[s

tart

,i−1

]區間的

和小於m

axco

st,也

就是su

m[i]

−sum

[sta

rt]<=m

axco

st所以

sum[

star

t]>=s

um[i

]−ma

xcos

t1<= i <= n時,[0, i- 1]區間內的和就是sum[i]我們需要找到乙個開始下標start,使得[start, i - 1]區間的和小於maxcost,也就是sum[i] - sum[start] <= maxcost 所以sum[start] >= sum[i] - maxcost

1<=i

<=n

時,[0

,i−1

]區間內

的和就是

sum[

i]我們

需要找到

乙個開始

下標st

art,

使得[s

tart

,i−1

]區間的

和小於m

axco

st,也

就是su

m[i]

−sum

[sta

rt]<=m

axco

st所以

sum[

star

t]>=s

um[i

]−ma

xcos

t,由於diff陣列都為正數,所以字首和陣列單調遞增,可以通過二分查詢來對每乙個 i

ii查詢最小的sta

rt下標

start下標

start下

標,每次查詢到的最長區間長度為i−s

tart

i - start

i−star

t, 每查詢一次更新答案res即可

class

solution

// sum陣列是單調遞增的

int res =0;

for(

int i =

1; i <= n; i++

)return res;

}int

binarysearch

(int

sum,

int end,

int target)

else

}return lo;

}}

leetcode 1208 盡可能使字串相等

目錄 一 題目內容 二 解題思路 三 給你兩個長度相同的字串,s 和 t。將 s 中的第 i 個字元變到 t 中的第 i 個字元需要 s i t i 的開銷 開銷可能為 0 也就是兩個字元的 ascii 碼值的差的絕對值。用於變更字串的最大預算是 maxcost。在轉化字串時,總開銷應當小於等於該預...

LeetCode 1208 盡可能使字串相等

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

LeetCode 1208 盡可能使字串相等

可以通過滑動視窗轉化為乙個最長序列求和問題,旨在在指定值下,找到總和小於該值的最長序列 如果使用dp動態規劃,但是會超時 class solution for int i 0 i len i for int i 0 i len 1 i for int l 2 l len l return maxn ...