class Solution {
public:
string minWindow(string S, string T) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
//两个指针,当右指针扫描至包含所有T中字母时,收缩左指针
vector<int> flag(128, 0);
int tLen = 0;
for (size_t i = 0; i < T.length(); ++i)
{
++flag[T[i]];
++tLen;
}
vector<int> curFlag(128, 0);
int curBeg = -1;
int curLen = 0;
int beg = -1;
int end = -2;
for (size_t i = 0; i < S.length(); ++i)
{
if (flag[S[i]] > 0)
{
++curFlag[S[i]];
if (flag[S[i]] >= curFlag[S[i]])
{
++curLen;
}
if (curBeg < 0)
{
curBeg = i;
}
if (curLen == tLen)
{
for (;curBeg < i; ++curBeg)
{
char index = S[curBeg];
if (flag[index] > 0)
{
if (curFlag[index] > flag[index])
{
--curFlag[index];
}
else
{
break;
}
}
}
if (i - curBeg < end - beg)
{
beg = curBeg;
end = i;
}
}
}
}
if (beg == -1)
{
return "";
}
else
{
return S.substr(beg, end - beg + 1);
}
}
};
LeetCode-Minimum Window Substring
最新推荐文章于 2021-07-18 12:53:28 发布