1. 程式人生 > >【leetcode】76. (Hard) Minimum Substring Window

【leetcode】76. (Hard) Minimum Substring Window

題目連結


解題思路:
滑動視窗:
建立兩個陣列,用於記錄目標字串的詞袋(target)和當前視窗中包含的有效字串的詞袋(current)。這裡的“有效”指的是字母是word2中出現過的單詞。
然後滑動視窗進行比對,當兩個詞袋一致時,就存在一個可能的substring window。

提交程式碼:

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; } }

執行結果:
在這裡插入圖片描述