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
};

 

 

 

 

posted @ 2020-03-02 21:11  leahtao  阅读(173)  评论(0编辑  收藏  举报