leetCode_Minimum Window Substring
2016-09-08 09:54
381 查看
题意:给定字符串s和t,返回s中包含t所有字符的长度最短的子串
例子:如s="ADOBECODEBANC",t="ABC",返回"BANC";
解法:用letters记录t中每个字符的出现个数,用一个队列记录s中的那些在t出现的下标,用cur记录s中t字符串里的字符出现个数,用count表示满足了t中的多少个字符。也就是说,若s[i]在t出现,并且cur[s[i]]<letters[s[i]]表示有效,count++。如果count与t的长度相等,表示全部字符已经出现一遍,下面只要从queue的下一个元素开始往复。说的很乱,看代码吧。
string minWindow(string s, string t)
{
int i,j,k,count=0,start,end;
vector<int> letters(128,0);
vector<int> cur(128,0);
queue<int> index;
start=-1;
end=s.length()+1;
for(i=0; i<t.length(); i++) letters[t[i]]++;
for(i=0; i<s.length(); i++)
{
if(letters[s[i]]>0)
{
index.push(i);
cur[s[i]]++;
if(cur[s[i]]<=letters[s[i]])
{
count++;
while(count==t.length())
{
if(i-index.front()<end-start)
{
end=i;
start=index.front();
}
cur[s[index.front()]]--;
if(cur[s[index.front()]]<letters[s[index.front()]]) count--;
index.pop();
}
}
}
}
if(start==-1) return "";
return s.substr(start,end-start+1);;
}
例子:如s="ADOBECODEBANC",t="ABC",返回"BANC";
解法:用letters记录t中每个字符的出现个数,用一个队列记录s中的那些在t出现的下标,用cur记录s中t字符串里的字符出现个数,用count表示满足了t中的多少个字符。也就是说,若s[i]在t出现,并且cur[s[i]]<letters[s[i]]表示有效,count++。如果count与t的长度相等,表示全部字符已经出现一遍,下面只要从queue的下一个元素开始往复。说的很乱,看代码吧。
string minWindow(string s, string t)
{
int i,j,k,count=0,start,end;
vector<int> letters(128,0);
vector<int> cur(128,0);
queue<int> index;
start=-1;
end=s.length()+1;
for(i=0; i<t.length(); i++) letters[t[i]]++;
for(i=0; i<s.length(); i++)
{
if(letters[s[i]]>0)
{
index.push(i);
cur[s[i]]++;
if(cur[s[i]]<=letters[s[i]])
{
count++;
while(count==t.length())
{
if(i-index.front()<end-start)
{
end=i;
start=index.front();
}
cur[s[index.front()]]--;
if(cur[s[index.front()]]<letters[s[index.front()]]) count--;
index.pop();
}
}
}
}
if(start==-1) return "";
return s.substr(start,end-start+1);;
}
相关文章推荐
- leetcode Minimum Window Substring答案解析
- LeetCode76 Minimum Window Substring(两种解法)
- LeetCode76 Minimum Window Substring
- [LeetCode]Minimum Window Substring
- Minimum Window Substring -- LeetCode
- leetcode minimum window subString
- [leetcode]Minimum Window Substring
- LeetCode Minimum Window Substring
- [LeetCode][Java] Minimum Window Substring
- [LeetCode] Minimum Window Substring 解题报告
- LeetCode76 Minimum Window Substring(两种解法)
- LeetCode-Minimum Window Substring
- Leetcode: Minimum Window Substring
- Minimum Window Substring -- LeetCode
- LeetCode-Minimum Window Substring
- LeetCode: Minimum Window Substring
- leetcode -- Minimum Window Substring -- 重点,应该会考
- leetcode第一刷_Minimum Window Substring
- Leetcode_minimum-window-substring(c++ version)
- LeetCode 笔记系列16.2 Minimum Window Substring [从O(N*M), O(NlogM)到O(N),人生就是一场不停的战斗]