Leetcode每日一题-验证回文串

511 阅读1分钟

题目描述:

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

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

示例:

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

解答

方法一:用api就完事儿

var isPalindrome = function(s) {
    let strArr = s.replace(/[^0-9a-zA-Z]/g,"").toLowerCase().split('');
    return strArr.join('') == strArr.reverse().join('');
};

补充:

[^abc] 匹配任何没有包含在方括号中的字符。

String.prototype.split() 方法使用指定的分隔符字符串将一个String对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置。

Array.prototype.join() 方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。如果数组只有一个项目,那么将返回该项目而不使用分隔符。

简单来说:

  • 字符串==>数组:split()
  • 数组==>字符串:join()

方法二:格式化+双指针逼近

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