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...