Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.00 KB | None | 0 0
  1. /*
  2. Runtime: 16 ms, faster than 63.17% of Java online submissions for Minimum Window Substring.
  3. Memory Usage: 38.4 MB, less than 90.43% of Java online submissions for Minimum Window Substring.
  4. */
  5.  
  6. class Solution {
  7.     public String minWindow(String s, String t) {
  8.         if (t.length() == 0) return "";
  9.        
  10.         char[] sarr = s.toCharArray();
  11.         char[] tarr = t.toCharArray();
  12.         Map<Character, Integer> reqMap = new HashMap<>();
  13.         for (int i = 0; i < tarr.length; i++) {
  14.             int c = reqMap.getOrDefault(tarr[i], 0);
  15.             reqMap.put(tarr[i], ++c);
  16.         }
  17.        
  18.         Map<Character, Integer> window = new HashMap<>();
  19.         int target = reqMap.size();
  20.         int front = 0;
  21.         int back = 0;
  22.         int found = 0;
  23.        
  24.         int minLength = -1;
  25.         int minStart = -1;
  26.         while(front < sarr.length) {
  27.             Integer required = reqMap.get(sarr[front]);
  28.             if (required != null) {
  29.                 int current = window.getOrDefault(sarr[front], 0);
  30.                 window.put(sarr[front], ++current);
  31.                 if (current == required)
  32.                     found++;
  33.             }
  34.            
  35.             while (found == target && back <= front) {
  36.                 int currentLen = front - back + 1;
  37.                
  38.                 if (minLength == -1 || currentLen < minLength) {
  39.                     minLength = currentLen;
  40.                     minStart = back;
  41.                    
  42.                 }
  43.                
  44.                 required = reqMap.get(sarr[back]);
  45.                 if (required != null) {
  46.                     int current = window.get(sarr[back]);
  47.                     window.put(sarr[back], --current);
  48.                     if (current < required)
  49.                         found--;
  50.                 }
  51.                 back++;
  52.             }
  53.             front++;
  54.         }
  55.        
  56.         if (minLength == -1) return "";
  57.         return s.substring(minStart, minStart + minLength);
  58.     }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement