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”.
快慢指针,块指针跑到位置,然后再向前缩进慢指针;
计算匹配可以使用hash或者是数组
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); } };
相关文章推荐
- (c++)——内联函数
- 提高项目19-有序数组中插入数据
- c#中的委托和c++中的bind/function对比
- 提高项目18-二分法解方程
- leetcode_c++:哈希:Group Anagrams (049)
- 提高项目17-有几个
- C语言实现六种排序算法
- 提高项目16.2 村民奖金2
- 函数
- IEEE POSIX 标准
- C++ 类的多态二(函数重载--函数重写--函数重定义)
- ISO C 标准
- union内存分配
- HDU1421 搬寝室(DP)
- 二叉查找树(二)之 C++的实现
- 二叉查找树(一)之 C语言的实现
- AVL树(二)之 C++的实现
- AVL树(一)之 C语言的实现
- 红黑树(三)之 C++的实现
- 嵌入式学习-uboot-lesson9.1-C语言环境初始化