LeetCode,
分享于 点击 40226 次 点评:129
LeetCode,
Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).
For example,
S = "ADOBECODEBANC"
T = "ABC"
Minimum window is "BANC"
.
Note:
If there is no such window in S that covers all characters in T, return the emtpy string ""
.
If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.
分析:
一前一后两个指针,后指针向后寻找到包含T的区间,移动前指针到最优位置,判断一次,如此循环。
class Solution {
public:
string minWindow(string S, string T) {
int Need[256], Now[256];
for(int i = 0;i < 256; i++){
Need[i] = Now[i] = 0;
}
int LS = S.length();
int LT = T.length();
for(auto ch:T)
Need[ch] ++;
int i = 0, j = 0, foundNum = 0;
int minLength = LS + 1, Begin = 0, End = 0;
while(j < LS){
if(!Need[S[j]]){
j++;
continue;
}
Now[S[j]]++;
if(Now[S[j]] <= Need[S[j]])
++foundNum;
if(foundNum == LT){
while(Need[S[i]] == 0 || Now[S[i]] > Need[S[i]]){
if(Now[S[i]] > Need[S[i]])
--Now[S[i]];
i++;
}
int l = j - i + 1;
if(l < minLength){
minLength = l;
Begin = i;
End = j;
}
}
j++;
}
return minLength <= LS ? S.substr(Begin, minLength) :"";
}
};
相关文章
- 暂无相关文章
用户点评