剑指 Offer II 019. 最多删除一个字符得到回文

唉。。这个之前的代码是这样的写的
结果


截屏2022-04-12 下午11.15.43.png

测试用例的字符串是

"aguokepatgbnvfqmgmlcupuufxoohdfpgjdmysgvhmvffcnqxjjxqncffvmhvgsymdjgpfdhooxfuupuculmgmqfvnbgtapekouga"

删除掉干扰因素

lcupuufxoohdfpgjdmysgvhmvffcnqxjjxqncffvmhvgsymdjgpfdhooxfuupucul

我之前一直以为 左边的+1下一位如果和右边相等的话 就应该删掉左边的因素
但是像这个测试用例 左边删掉之后 下一位和右边相等 但是后续的就不相等了
反倒是右边的删除之后 是个完整的回文字符串。。
所以。。正确的做法。。就是去掉左边或者右边的情况下 去判断是否是回文字符串
左右两种情况 有一种符合即可。。


 func validPalindrome(_ s: String) -> Bool {

        var left = 0
        var right = s.count - 1
        let array = Array(s)
        let len = array.count
        var count = 0

        while left < right {
            
            if array[left] == array[right] {
                
                left += 1
                right -= 1
            }
            else if (left + 1 <= right ) && (left + 1 < len) && (array[ left + 1] == array[right]) {
                
                left += 1
                count += 1
            }
            else if (right - 1 >= 0) && (array[right - 1] == array[left]) {
                right -= 1
                count += 1

            }else {
                
                return false
                
            }
            
            if  count > 1 {
                return false
            }

        }
     
         return true

    }

正确的代码


func validPalindrome(_ s: String) -> Bool {

        var left = 0
        var right = s.count - 1
        let array = Array(s)

        while left < right {
            
            if array[left] == array[right] {
                
                left += 1
                right -= 1
            } else {
                
                return valid(array,left + 1,right) || valid(array,left,right - 1)
            }
            
        }
         return true

    }
    
    func valid(_ array:Array,_ left:Int ,_ right:Int) -> Bool {
        var  start = left
        var  end = right
        while start < end {
            
            if  array[start] == array[end] {
                start += 1
                end -= 1
            }else {
                return false
            }
        }
        return true
                
    }




你可能感兴趣的:(剑指 Offer II 019. 最多删除一个字符得到回文)