[LeetCode] Minimum Window Substring

Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).

Example:

Input: S = “ADOBECODEBANC”, T = “ABC”
Output: “BANC”

	import java.util.HashMap;
	import java.util.Scanner;
	
	
	//伸缩滑动窗口
	public class Win {
	
	    public static void main (String[] args) {
	
	        Scanner sc = new Scanner(System.in);
	        String s = sc.nextLine();
	        String t = sc.nextLine();
	
	        HashMap hs = new HashMap<>();
	        for(int i=0; i < s.length(); i++){
	            hs.put(s.charAt(i), 0);
	
	        }
	
	        for (int i=0; i < t.length(); i++){
	            hs.put(t.charAt(i), 1);
	        }
	
	        int count = 0;
	        int left = 0;
	        int minLen = Integer.MAX_VALUE;
	        String str = "";
	        for (int i=0; i < s.length(); i++){
	            char ch = s.charAt(i);
	            int c = hs.get(ch);
	            if(c == 1) count++;
	            hs.put(ch, c-1);
	
	            while(count == t.length()) {
	                if (minLen > i-left+1) {
	                    minLen = i-left+1;
	                    str = s.substring(left, i+1);
	                }
	
	                int times = hs.get(s.charAt(left));
	                times++;
	                hs.put(s.charAt(left),times);
	                if (times == 1) count--;
	
	                left++;
	            }
	
	        }
	
	        System.out.println(str);
	
	
	    }



}

你可能感兴趣的:(算法)