您的位置:首页 > 其它

LeetCode Minimum Window Substring

2014-05-26 20:58 323 查看
题目:

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.
class Solution {
public:
//使用首尾指针,复杂度为O(n)
string minWindow(string S, string T) {
if (S.size() == 0 || T.size() == 0)
return "";
int n = T.size();
int minS = INT_MAX;
int xx;
int tt1[256] = { 0 };
int ss[256] = { 0 };
for (int i = 0; i < n; i++)
tt1[T[i]]++;
int end = 0;
int cnt = 0;
for (int beg = 0; beg < S.size(); beg++) {
while (end < S.size()) {
if (cnt == n)
break;
if (tt1[S[end]] > 0) {
ss[S[end]]++;
if (ss[S[end]] <= tt1[S[end]]) {
cnt++;
}
}
if (cnt == n)
break;
end++;
}
//没有再符合条件的了!!
if (end == S.size())
break;
if (end - beg + 1 < minS) {
minS = end - beg + 1;
xx = beg;
}
if (tt1[S[beg]] > 0) {
ss[S[beg]]--;
if (ss[S[beg]] < tt1[S[beg]])
cnt--;
}
if (cnt != n)
end++;
}
if (minS == INT_MAX)
return "";
string ans(S, xx, minS);
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: