码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 76. 最小覆盖子串

时间:2018-07-23 18:08:20      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:bre   ==   存储   否则   false   记录   次数   str   需要   

class Solution {
public:
  //考虑到s完全包含t
bool is_windwo_ok(int map_s[], int map_t[], vector<int> &vec_t) { for(int i=0; i<vec_t.size(); ++i) { if(map_s[vec_t[i]] < map_t[vec_t[i]]) return false; } return true; } string minWindow(string s, string t) { //用来存储字符串中对应的map结构 int map_t[128] = {0}; int map_s[128] = {0}; vector<int> vec_t; for(int i=0; i<t.size(); ++i) map_t[t[i]]++; // 只需要记录出现过一次的字符就可以了,没必要记录出现次数超过一次的字符 for(int i=0; i<128; ++i) { if(map_t[i] > 0) vec_t.push_back(i); } int window_beg = 0; string result; for(int i=0; i<s.size(); ++i) { map_s[s[i]]++; //每向前移动一步,尝试移动头指针 while(window_beg < i) { char begin_ch = s[window_beg]; if(map_t[begin_ch] == 0)//没有出现过 { window_beg++; } else if(map_s[begin_ch] > map_t[begin_ch])//大于map_t中出现的次数 { map_s[begin_ch]--; window_beg++; } else { break;//否则就表明不能在往前移动了 } } //尝试更新此窗口是否包含字符串t if(is_windwo_ok(map_s, map_t, vec_t)) { int new_window_len = i-window_beg + 1; if(result == "" || result.size() > new_window_len) { result = s.substr(window_beg, new_window_len); } } } return result; } };

 

Leetcode 76. 最小覆盖子串

标签:bre   ==   存储   否则   false   记录   次数   str   需要   

原文地址:https://www.cnblogs.com/randyniu/p/9355904.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!