力扣76 最小覆蓋字串

2021-10-14 01:25:11 字數 1260 閱讀 6022

class

solution

int[

] sarr =

newint

[256];

int left =

findnextstridx(0

, s, tarr);if

(left == s.

length()

)return"";

//遍歷完都沒有

int right = left;

while

(right < s.

length()

) sarr[rightchar]++;

//該字元次數+1

//如果找到乙個解,更新res值,這個時候要移動left

while

(left < s.

length()

&& matchcount == t.

length()

)int leftchar = s.

charat

(left);if

(sarr[leftchar]

<= tarr[leftchar]

) sarr[leftchar]--;

//leftchar出的字元次數要-1

left =

findnextstridx

(left +

1, s, tarr)

;//left移到下乙個t中包含的字元

}//還未找到,找到下乙個匹配的字元

right =

findnextstridx

(right +

1, s, tarr)

;//移到下乙個t中包含的字元

}return res;

}public

intfindnextstridx

(int start, string s,

int[

] tarr)

return start;

}}

歸納:

先遍歷s,找到所有匹配的元素,定位left,移動right指標,計算每次元素出現的次數和總的match數(注意兩者區別),match數達到target後,再移動left指標,找出最短的匹配字串,如果不滿足match數,left不動,再移動right使match重新滿足,再移動left…

力扣 76 最小覆蓋子串 滑動視窗

思路 滑動視窗,搞兩個指標l r 0l r 0 l r 0,把r rr右移直到滿足題意,然後再把l ll右移直到不滿足題意,這時記錄一下最小值,重複這個過程即可。class solution siz s.size int l 0,r 0 string ans while rif ct return ...

76 最小覆蓋子串

題目 給你乙個字串s 乙個字串t,請在字串s裡面找出 包含t所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 方法一 自己寫的,但是leetcode上超時 defminwindow s,t m 0 all in false iflen t 0or len s...

76 最小覆蓋子串

給你乙個字串 s 乙個字串 t,請在字串 s 裡面找出 包含 t 所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 說明 如果 s 中不存這樣的子串,則返回空字串 如果 s 中存在這樣的子串,我們保證它是唯一的答案。class solution int ma...