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
    };
     
    方法四:在方法三上优化,边遍历边忽略不合法的字符,直接遍历一遍完事
  • 相关阅读:
    redis学习
    Ubuntu命令大全
    关于jquery中attr和prop的用法
    Ubuntu下修改为永久DNS的方法
    Yii2 behaviors中verbs access的一些理解
    vue_ form表单 v-model
    vue-one_demo_music
    ES6
    VUE 入门 01
    Django model.py表单设置默认值允许为空
  • 原文地址:https://www.cnblogs.com/rencoo/p/13823997.html
Copyright © 2011-2022 走看看