LeetCode热题(JS版) -125. 验证回文串

191 阅读1分钟

题目描述

给定一个字符串,判断它是否是回文串,只考虑字母和数字字符,忽略大小写。

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

示例2: 输入: "race a car" 输出: false

解题思路

为了验证一个回文串,我们可以对输入字符串进行预处理,将其转换为只包含字母和数字的格式。然后,使用双指针的方法来判断处理后的字符串是否是回文串。

以下是使用Typescript实现的代码:

function isPalindrome(s: string): boolean {
    const processedString = s.replace(/[^a-zA-Z0-9]/g, "").toLowerCase();
    let left = 0;
    let right = processedString.length - 1;

    while (left < right) {
        if (processedString[left] !== processedString[right]) {
            return false;
        }
        left++;
        right--;
    }

    return true;
}

复杂度分析

  • 时间复杂度:O(n),其中 n 是字符串的长度。首先,预处理字符串需要遍历整个字符串,将非字母和数字的字符替换为无效字符。然后,使用双指针在最坏情况下遍历整个处理后的字符串一次。
  • 空间复杂度:O(n),需要使用额外的空间来存储处理后的字符串。