赞
踩
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。
示例 :
输入:s = “ADOBECODEBANC”, t = “ABC”
输出:“BANC”
解释:最小覆盖子串 “BANC” 包含来自字符串 t 的 ‘A’、‘B’ 和 ‘C’。
class Solution { public: bool check(map<char, int>& maps){ for(auto it : maps){ if(it.second > 0){ return false; } } return true; } string minWindow(string s, string t) { int n = s.size(); int n1 = t.size(); map<char, int> maps; for(int i = 0; i < n1; i++){ maps[t[i]]++; } int pl = 0, pr = 0; int pl_ret = 0; int ret = n; bool flag = false; while(pr <= n){ if(!check(maps)){ if(maps.find(s[pr]) != maps.end()) maps[s[pr]]--; pr++; } else{ if(pr-pl <= ret){ flag = true; ret = pr-pl; pl_ret = pl; } if(maps.find(s[pl]) != maps.end()) maps[s[pl]]++; pl++; } } if(flag) return s.substr(pl_ret, ret); else return ""; } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。