您的位置:首页 > 编程语言 > C语言/C++

leetcode_c++:哈希:Group Anagrams (076)

2016-07-02 14:29 519 查看
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”.

算法

O(N)

快慢指针,块指针跑到位置,然后再向前缩进慢指针;

计算匹配可以使用hash或者是数组

class Solution {
private:
int sta[255]={0};
int wnd[255]={0};
public:
string minWindow(string s, string t) {
if(s.empty()||t.empty())
return "";
int slen=s.length(),tlen=t.length();
int res_pos=0; //position of result
int min_len=INT_MAX;
int count=0; //match count in windows
int slow=0,fast=0;

//deal T
for(int i=0;i<tlen;++i)
++sta[t[i]];
//count
for(int fast=0;fast<slen;++fast){
int idx=s[fast];
++wnd[idx];
if(wnd[idx]<=sta[idx])
++count;
//match enough
if(count>=tlen){
while(wnd[s[slow]]>sta[s[slow]])
--wnd[s[slow++]]; //euqal to: wnd[s[slow]]--; slow++
if(fast-slow+1<min_len){
min_len=fast-slow+1;
res_pos=slow;
}

//make it not enough again
--wnd[s[slow++]];
--count;
}

}

return s.substr(res_pos,min_len==INT_MAX? 0:min_len);

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: