【leetcode】76. (Hard) Minimum Substring Window

题目链接


解题思路:
滑动窗口:
创建两个数组,用于记录目标字符串的词袋(target)和当前窗口中包含的有效字符串的词袋(current)。这里的“有效”指的是字母是word2中出现过的单词。
然后滑动窗口进行比对,当两个词袋一致时,就存在一个可能的substring window。

这里参考了题目后面description中的一个解答:
https://leetcode.com/problems/minimum-window-substring/discuss/194112/Java-O(n)-time-O(1)-space
所以此篇博客设置为转载标签。

提交代码:

class Solution{
	public String minWindow(String s,String t) {
		int[] current=new int[126];
		int[] target=new int[126];
		Queue<Integer> q=new LinkedList<>();
		
		int i,j,k;boolean flag;String res="";
		int minWindow=Integer.MAX_VALUE;
		
		for(i=0;i<t.length();i++)
			target[t.charAt(i)]++;

		for(j=0;j<s.length();j++) {
			if(target[s.charAt(j)]>0) {
				q.add(j);
				current[s.charAt(j)]++;
				while(current[s.charAt(q.peek())]>target[s.charAt(q.peek())]) {
					current[s.charAt(q.peek())]--;
					q.remove();
				}
				i=q.peek();
				
				flag=true;
				for(k=0;k<target.length;k++)
					if(target[k]>current[k]) {
						flag=false;
						break;
					}
				
				if(flag&&j-i+1<minWindow) {
					minWindow=j-i+1;
					res=s.substring(i, j+1);
				}
			}
		}
		return res;	
	}
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/AXIMI/article/details/84196997