题目描述
给定一个字符串,判断它是否是回文串,只考虑字母和数字字符,忽略大小写。
示例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),需要使用额外的空间来存储处理后的字符串。