Advertisement
Alexxik

Untitled

Sep 11th, 2023 (edited)
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 2.00 KB | None | 0 0
  1. // MARK: - Valid Palindrome II
  2.  
  3. // 2 указателями. Идти с двух сторон исходной строки к середине, пропуская пары одинаковых символов. Как только нашли пару различных - перебираем два варианта тестируем на палиндром либо без левой границы, либо без правой.
  4.  
  5. func validPalindrome(_ s: String) -> Bool {
  6.     var s = Array(s).map{String($0)}
  7.    
  8.     var l = 0
  9.     var r = s.count - 1
  10.    
  11.     while l < r {
  12.         if s[l] != s[r] {
  13.             // Первый - скипая левый +1 и Второй - не доходя до последнего
  14.             let skipL = Array(s[l+1...r])
  15.             let skipR = Array(s[l..<r])
  16.            
  17.             if skipL == skipL.reversed() || skipR == skipR.reversed() {
  18.                 return true
  19.             } else {
  20.                 return false
  21.             }
  22.         }
  23.         l += 1
  24.         r -= 1
  25.     }
  26.     // По дефолту возвращаем true для случаев "aba" - удалим b
  27.     return true
  28. }
  29.  
  30. validPalindrome("apnba")
  31.  
  32.  
  33.  
  34.  
  35. func validPalindrome(_ s: String) -> Bool {
  36.     let s = Array(s).map{String($0)}
  37.    
  38.     func checkpalindrome(_ s: [String]) -> Bool {
  39.         var l = 0
  40.         var r = s.count - 1
  41.        
  42.         while l < r {
  43.             if s[l] != s[r] {
  44.                 return false
  45.             }
  46.             l += 1
  47.             r -= 1
  48.         }
  49.         return true
  50.     }
  51.    
  52.     var l = 0
  53.     var r = s.count - 1
  54.    
  55.     while l < r {
  56.         if s[l] != s[r] {
  57.             let withoutLeft = Array(s[l+1...r])
  58.             let withoutRight = Array(s[l..<r])
  59.            
  60.             if checkpalindrome(withoutLeft) || checkpalindrome(withoutRight) {
  61.                 return true
  62.             } else {
  63.                 return false
  64.             }
  65.         }
  66.        
  67.         l += 1
  68.         r -= 1
  69.     }
  70.     return true
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement