【leetcode】76. (Hard) Minimum Substring Window
阿新 • • 發佈:2018-12-22
解題思路:
滑動視窗:
建立兩個陣列,用於記錄目標字串的詞袋(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;
}
}
執行結果: