Advertisement
Alexxik

Untitled

Sep 11th, 2023 (edited)
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.17 KB | None | 0 0
  1. // MARK: - 567 Permutation in String
  2.  
  3. // Содержится ли в строке перестановка другой строки
  4.  
  5. func checkInclusion(_ s1: String, _ s2: String) -> Bool {
  6.     if s1.count > s2.count {return false}
  7.     let s1: [Character] = Array(s1)
  8.     let s2: [Character] = Array(s2)
  9.    
  10.     var dictS1 = [Character:Int]()
  11.     var dictS2 = [Character:Int]()
  12.    
  13.     // проходимся по маленькой
  14.     for i in 0..<s1.count {
  15.         dictS1[s1[i], default: 0] += 1
  16.         dictS2[s2[i], default: 0] += 1
  17.     }
  18.    
  19.     // Скользящее окно начнется со следующего элемента
  20.     var l = 0
  21.     var r = s1.count
  22.    
  23.     while r < s2.count {
  24.         if dictS1 == dictS2 {
  25.             return true
  26.         }
  27.        
  28.         // Во втором массиве
  29.         dictS2[s2[r], default: 0] += 1
  30.         dictS2[s2[l]]! -= 1
  31.         if dictS2[s2[l]] == 0 {
  32.             dictS2[s2[l]] = nil
  33.         }
  34.        
  35.         r += 1
  36.         l += 1
  37.     }
  38.    
  39.     // Не забывай про последнюю итерацию!!!
  40.     return dictS1 == dictS2
  41. }
  42.  
  43. checkInclusion("adc", "dcda")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement