Advertisement
Alexxik

Untitled

Sep 12th, 2023 (edited)
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.45 KB | None | 0 0
  1. // MARK: - 3 Longest Substring Without Repeating Characters
  2. // Найдите длину самой длинной подстроки без повторяющихся символов
  3. // Скользящее окно + хэшмапа
  4.  
  5. func lengthOfLongestSubstring(_ s: String) -> Int {
  6.     var s = Array(s).map{String($0)}
  7.     var dict = [String:Int]()
  8.     var maxLength = 0
  9.    
  10.     var r = 0
  11.     var l = 0
  12.    
  13.     while r < s.count {
  14.         dict[s[r], default: 0] += 1
  15.        
  16.         while dict[s[r]] == 2 {
  17.             // Убираем из словаря буквы по левому индексу, так как он сужает окно
  18.             dict[s[l]]! -= 1
  19.             if dict[s[l]] == 0 {
  20.                 dict[s[l]] = nil
  21.             }
  22.             l += 1
  23.         }
  24.         maxLength = max(maxLength, r-l+1)
  25.         r += 1
  26.     }
  27.     return maxLength
  28. }
  29.  
  30. lengthOfLongestSubstring("tmmzuxt")
  31.  
  32.  
  33.  
  34. // 2 вариант решения через set
  35. func lengthOfLongestSubstring(_ s: String) -> Int {
  36.     var s = Array(s).map{String($0)}
  37.     var maxLength = 0
  38.     var set = Set<String>()
  39.    
  40.     var r = 0
  41.     var l = 0
  42.    
  43.     while r < s.count {
  44.        
  45.         while set.contains(s[r]) {
  46.             set.remove(s[l])
  47.             l += 1
  48.         }
  49.        
  50.         set.insert(s[r])
  51.         maxLength = max(maxLength, r-l+1)
  52.         r += 1
  53.     }
  54.     return maxLength
  55. }
  56.  
  57. lengthOfLongestSubstring("pwwkew")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement