Advertisement
HXXXXJ

76. Minimum Window Substring

Mar 23rd, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.61 KB | None | 0 0
  1. class Solution {
  2.     func minWindow(_ s: String, _ t: String) -> String {
  3.         var map = [Character : Int]()   //t's char and count
  4.         var diff = t.count
  5.         var left = 0
  6.         var right = 0
  7.         // var res = ""
  8.         var len = Int.max
  9.         var start = 0
  10.         let sArr = Array(s)
  11.         for char in t {
  12.             map[char, default: 0 ] += 1   // count
  13.         }
  14.  
  15.         while right < sArr.count {
  16.             let char = sArr[right]
  17.            
  18.             if let count = map[char] {  //t has this char
  19.                 if count > 0 {          //this is useful to diff
  20.                     diff -= 1
  21.                 }
  22.                 map[char] = count - 1
  23.             }
  24.             if diff == 0 {  // found an ans
  25.                 while left <= right{
  26.                     if let count = map[sArr[left]] {
  27.                         if count == 0 {
  28.                             if right - left + 1 < len{
  29.                                 len = right - left + 1
  30.                                 start = left
  31.                             }
  32.                             map[sArr[left]] = count + 1
  33.                             left += 1
  34.                             diff += 1
  35.                             break
  36.                         }
  37.                         map[sArr[left]] = count + 1
  38.                     }
  39.                     left += 1
  40.                 }
  41.             }
  42.    
  43.             right += 1
  44.         }
  45.         if len == Int.max { return "" }
  46.         //              print(start)
  47.         //              print(len)
  48.         return String(sArr[start ..< start + len])
  49.     }
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement