Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MARK: - 3 Longest Substring Without Repeating Characters
- // Найдите длину самой длинной подстроки без повторяющихся символов
- // Скользящее окно + хэшмапа
- func lengthOfLongestSubstring(_ s: String) -> Int {
- var s = Array(s).map{String($0)}
- var dict = [String:Int]()
- var maxLength = 0
- var r = 0
- var l = 0
- while r < s.count {
- dict[s[r], default: 0] += 1
- while dict[s[r]] == 2 {
- // Убираем из словаря буквы по левому индексу, так как он сужает окно
- dict[s[l]]! -= 1
- if dict[s[l]] == 0 {
- dict[s[l]] = nil
- }
- l += 1
- }
- maxLength = max(maxLength, r-l+1)
- r += 1
- }
- return maxLength
- }
- lengthOfLongestSubstring("tmmzuxt")
- // 2 вариант решения через set
- func lengthOfLongestSubstring(_ s: String) -> Int {
- var s = Array(s).map{String($0)}
- var maxLength = 0
- var set = Set<String>()
- var r = 0
- var l = 0
- while r < s.count {
- while set.contains(s[r]) {
- set.remove(s[l])
- l += 1
- }
- set.insert(s[r])
- maxLength = max(maxLength, r-l+1)
- r += 1
- }
- return maxLength
- }
- lengthOfLongestSubstring("pwwkew")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement