您的位置:首页 > 其它

leetcode 76:Minimum Window Substring

2015-11-26 22:39 465 查看
题目:

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 empty string 
""
.

If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.
思路:
参考:https://leetcode.com/discuss/5469/is-the-length-of-t-considered-constant-or-m

时间复杂度:O(n)

class Solution {
public:
string minWindow(string s, string t) {
int size1 = s.size(), size2 = t.size();
if (size1 == 0 || size2 == 0) return ("");
vector<int> hash(128, 0),require(128,0);
for (int i = 0; i < size2; ++i)
{
hash[t[i]]++;
require[t[i]] = 1;
}
int i = -1, j = 0, minLen = INT_MAX, minIndex = 0, count = size2;
while (i < size1 && j < size1)
{
if (count)
{
hash[s[++i]]--;
if (require[s[i]] && hash[s[i]] >= 0) --count;
}
else
{
if (minLen > i - j + 1)
{
minLen = i - j + 1;
minIndex = j;
}
hash[s[j]]++;
if (require[s[j]] && hash[s[j]] > 0) ++count;//如果hash[s[j]]++后还小于等于0,则count不能加1,不过我觉得不会出现不大于0的情况
++j;
}
}
if (minLen == INT_MAX) return "";
return s.substr(minIndex, minLen);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: