zoukankan      html  css  js  c++  java
  • 125. 验证回文字符串

    方法一:思维定势,直接想到用栈 (比较蠢 5.09% 与 30.88%)

    var isPalindrome = function(s) {
        s = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase()
        
        const stack = [],  len = s.length, half = Math.floor(len / 2)
        for (let i = 0; i < half; i += 1) {
            stack.push(s[i])
        }
    
        for (let i = len - 1; i >= half; i -= 1) {
            if (stack.length && s[i] !== stack.shift()) {
                return false
            }
        }
    
        return true
    };


    方法二:直接比较前半段和后半段字符串 (94.17% 和 45.62%)

    var isPalindrome = function(s) {
        s = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase()
        const len = s.length
        if (len % 2 === 0) {
            return s.substring(0, len / 2) === s.substring(len / 2, len).split('').reverse().join('')
        } else {
            return s.substring(0, (len - 1) / 2) === s.substring((len + 1) / 2, len).split('').reverse().join('')
        }
    };

    方法三: 双指针 (94.17% 和 47.66%, 可以提前结束)

    var isPalindrome = function(s) {
        s = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase()
        let i = 0, j = s.length - 1
        while (i < j) {
            if (s[i] === s[j]) {
                i += 1
                j -= 1
            } else {
                return false
            }
        }
    
        return true
    };
     
    方法四:在方法三上优化,边遍历边忽略不合法的字符,直接遍历一遍完事
  • 相关阅读:
    用表组织数据
    SQL Server 2008创建数据库
    c#字符串常用方法
    属性升级介绍
    c#语法
    初识C#
    CSS动画
    YCSB性能测试工具使用
    高性能的Redis代理TwemProxy
    JVM垃圾回收总结
  • 原文地址:https://www.cnblogs.com/rencoo/p/13823997.html
Copyright © 2011-2022 走看看