美文网首页
剑指 Offer II 018. 有效的回文

剑指 Offer II 018. 有效的回文

作者: 邦_ | 来源:发表于2022-04-18 16:30 被阅读0次

题中说了 数字字符和大小写字符 并且忽略大小写
难点可能就是ASCII码的数值 如果不清楚的 也可以借助这样

  func isAlphaNum(_ c:Character) -> Bool {
        
        if c >= "a" && c <= "z" || c >= "0" && c <= "9" {
            
            return true
        }
        return false
        
 
    }


所以过滤之后 双指针。。起始位置和结束位置是否相同

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

        let array = Array(s)
        var endArray = Array<Character>()

        
//        48 - 57  0 - 9
//        65 - 90  A - Z
//        97 - 122 a - z
        
        
        for c in array {
            
            let tempValue = c.asciiValue ?? 0
            
            if  (tempValue >= 48 && tempValue <= 57) || (tempValue >= 97 && tempValue <= 122) {
                endArray.append(c)
            }
            else if  tempValue >= 65 && tempValue <= 90 {
                endArray.append(Character(c.lowercased()))
            }
    
        }
        var left = 0
        var right = endArray.count - 1
        
        
        while (left < right) && (left < endArray.count) && (right > 0) {
            
            if endArray[left] == endArray[right] {
                
                left += 1
                right -= 1
                
            }else {
                
                return false

            }

            
        }
        

        return true

    }

然后这里是优化的版本
因为可以在左右指针移动的时候判断 可能不用处理完所有的就可以判断出结果 所以

func isPalindrome(_ s: String) -> Bool {
        
        let array = Array(s)
        var left = 0
        var right = array.count - 1
        
        
        while (left < right) && (left < array.count) && (right > 0) {
            
            let tempLeft = Character(array[left].lowercased())
            let tempRight = Character(array[right].lowercased())
            
            if isAlphaNum(tempLeft) == false  {
                left += 1
            }
            else if isAlphaNum(tempRight) == false  {
                right -= 1
            }
            else if tempRight == tempLeft {
                
                left += 1
                right -= 1
                
            }else {
                
                return false

            }
            
        }
        

        return true

    }
    
    
    
    func isAlphaNum(_ c:Character) -> Bool {
        
        if c >= "a" && c <= "z" || c >= "0" && c <= "9" {
            
            return true
        }
        return false
        
        
    }




相关文章

网友评论

      本文标题:剑指 Offer II 018. 有效的回文

      本文链接:https://www.haomeiwen.com/subject/mvsnsrtx.html