Skip to content

验证回文串 #14

Open
Open
@Bulandent

Description

@Bulandent

验证回文串

难度:简单
来源:125. 验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
回文串就是从左往右和从右往左的每个字符都是一样的。
说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

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

示例 2:

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

思路:

  • 首先需要判空,因为空字符串也是回文,所以如果为空直接返回 true;
  • 然后是需要将字符串不区分大小写,所以需要全部转成小写或者大小;
  • 把得到的字符串转成数组,然后过滤出字母和数字;
  • 最后遍历新数组,使用双指针获取头尾字符判断是否相等,不相等直接返回 false,否则遍历结束则表明它是回文串;
  • 需要注意的是:遍历的时候结束条件是 left < right,这样会比 left <= right 减少一次比较。

题解:

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
    if (!s) return true
    let arr = [...s.toLowerCase()].filter(
        item => 'a' <= item && item <= 'z' 
        || '0' <= item && item <= '9')

    let left = 0, right = arr.length - 1
    while(left <= right) {
        if ( arr[left] !== arr[right]) {
            return false
        }
        left++
        right--
    }   
    return true 
};

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions