美文网首页
剑指 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