Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MARK: - Valid Palindrome II
- // 2 указателями. Идти с двух сторон исходной строки к середине, пропуская пары одинаковых символов. Как только нашли пару различных - перебираем два варианта тестируем на палиндром либо без левой границы, либо без правой.
- func validPalindrome(_ s: String) -> Bool {
- var s = Array(s).map{String($0)}
- var l = 0
- var r = s.count - 1
- while l < r {
- if s[l] != s[r] {
- // Первый - скипая левый +1 и Второй - не доходя до последнего
- let skipL = Array(s[l+1...r])
- let skipR = Array(s[l..<r])
- if skipL == skipL.reversed() || skipR == skipR.reversed() {
- return true
- } else {
- return false
- }
- }
- l += 1
- r -= 1
- }
- // По дефолту возвращаем true для случаев "aba" - удалим b
- return true
- }
- validPalindrome("apnba")
- func validPalindrome(_ s: String) -> Bool {
- let s = Array(s).map{String($0)}
- func checkpalindrome(_ s: [String]) -> Bool {
- var l = 0
- var r = s.count - 1
- while l < r {
- if s[l] != s[r] {
- return false
- }
- l += 1
- r -= 1
- }
- return true
- }
- var l = 0
- var r = s.count - 1
- while l < r {
- if s[l] != s[r] {
- let withoutLeft = Array(s[l+1...r])
- let withoutRight = Array(s[l..<r])
- if checkpalindrome(withoutLeft) || checkpalindrome(withoutRight) {
- return true
- } else {
- return false
- }
- }
- l += 1
- r -= 1
- }
- return true
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement