LeetCode-Minimum Window Substring-最小窗口子串-滑动窗口算法(尺取法)

https://oj.leetcode.com/problems/minimum-window-substring/

线性复杂度的限制下,考虑使用滑动窗口法。这个方法的思路就是维持一个窗口,窗口向右边界扩张以满足限制条件。窗口左边界收缩以尽量使其最小。

注意这个题目可能是一个典型的滑动窗口方法的实现。外部循环移动左边界i,循环内部扩张右边界p以满足限制条件。并且内外都有终止可能。

使用两个map和一个计数变量以快速统计条件限制的满足情况。

class Solution {
public:
	int n,m;
	string minWindow(string S, string T) {
		map  cm;
		map  stat;
		n=S.length();
		m=T.length();
		for (int i=0;i::max();
		typedef pair  scpair;
		scpair minw;
		int q=0;
		int count=0;
		for (int i=0;in){
					endFlag=true;
					break;
				}
				if (cm.find(S[q-1])==cm.end()){continue;}
				if (stat[S[q-1]] q-i){
				res=q-i;
				minw=scpair(i,q);    
			}
			if (cm.find(S[i])==cm.end()){continue;}
			stat[S[i]]--;
			if (stat[S[i]]n){return "";}//no win
		return S.substr(minw.first,minw.second-minw.first);
	}
};

  

转载于:https://www.cnblogs.com/yangsc/p/4005519.html

你可能感兴趣的:(LeetCode-Minimum Window Substring-最小窗口子串-滑动窗口算法(尺取法))