赞
踩
初始化两个哈希表window,need记录窗口的字符以及所需要凑齐的字符,再定义变量valid表示窗口中满足need条件的个数,如果valid==need.size(),说明符合情况
class Solution { public: string minWindow(string s, string t) { unordered_map<char,int>window; unordered_map<char,int>need; int left=0;int right=0; int valid=0; int start=0;int len=INT_MAX;//记录子串的起始位置与长度 for(auto ch:t) { need[ch]++; } while(right<s.size()) { char c=s[right];//因为是[left,right),所c是将要进入窗口的字符 right++; if(need.count(c)) { window[c]++; if(window[c]==need[c]) { valid++; } } //判断左区间是否要收缩 while(valid==need.size()) { //找到了匹配的子串,现在需要找到最小的一个 if(right-left<len) { start=left; len=right-left; } char d=s[left];//将要弹出 left++; if(need.count(d)) { if(window[d]==need[d]) { valid--; } window[d]--; } } } return len==INT_MAX?"":s.substr(start,len); } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。