Day 4 | 验证回文字符串

275 阅读1分钟

「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!

题目描述:

LeetCode 地址

标签:字符串
难度:简单
描述:

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

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

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

题解

题目理解

考察点:

  • 正则匹配
  • 字符串反转
  • 对称特性

解法一:正则匹配

解题思路

  1. 核心思路:s.replace(/[^0-9a-zA-Z]/g, '')

代码

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
    const pureS = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase();
    const reverseS = pureS.split('').reverse().join('');

    return pureS == reverseS;
};

算法分析

image.png

解法二:对称性、双指针

解题思路

  1. 核心思路:s[i] = s[len - 1 - i]

代码

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
    const pureS = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase();
    const len = pureS.length;
    let isValid = true;
    for(let i = 0; i < len/2; i++) {
        if (pureS[i] !== pureS[len - 1 - i]) {
            isValid = false;
        }
    }
    return isValid;
};

算法分析

image.png

总结

  1. 回文字符串:正序和倒序都相同的字符串。
  2. 字符串基本算法:反转
  3. 回文字符串特性:对称性
  4. 回文字符串算法:双指针