leetcode 125.回文字符串

题目描述:

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:

输入: "race a car"
输出: false

解析题目:

首先明确什么是回文字符串,就是一个字符串的前半部分等于后半部分反转后的结果。比如:abccba就是回文,nmpmnb就不是回文

思路一:

用正则提取字母和数字字符,然后反转对比。(字符串转数组,反转数组,数组转字符串)。

var isPalindrome = function (s) {
        s = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase() //转换成字符串
        let news = s.split("").reverse().join("") //字符串转数组,反转数组,数组转字符串
        if(s === news){
            return true
        }else {
            return false
        }
    }

思路二:

双指针:

用正则提取字母和数字字符,然后让第一个指针在最左边,第二个指针在最右边,两个指针同时走,看值是否相等

var isPalindrome = function(s) {
    s = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase() //转换成字符串
        let left = 0;
        let right = s.length-1
        while (left < right) {
            if(s[left] != s[right]){ //如果有一个不相等就停止
                return false
            }
            left++
            right--
        }
        return true
};

 

不积跬步无以至千里
原文地址:https://www.cnblogs.com/lyt0207/p/12398042.html