每天学习一点算法 2025/12/01
题目:验证回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
-
回文串,首先想到的一个解法是反转字符串再做比较,只是我们需要先将所有大写字符转换为小写字符、并移除所有非字母数字字符(利用正则实现)。
function isPalindrome(s: string): boolean { const str = s.replace(/[^a-zA-Z0-9]/g, '').toLocaleLowerCase() return str === [...str].reverse().join('') }; -
还有一种方法就是利用双指针,从字符串两边向中间遍历,遇到非字母数字字符时跳过,然后比较两个指针所指的字符,如直到两个指针相遇都没遇到不相等的字符,那这个字符串就是回文串。
function isPalindrome1(s: string): boolean { for (let i = 0, j = s.length - 1; i < j; i++, j--) { while (i < j && !/[a-zA-Z0-9]/.test(s[i])) i++ while (i < j && !/[a-zA-Z0-9]/.test(s[j])) j-- if (s[i].toLocaleLowerCase()!== s[j].toLocaleLowerCase()) return false } return true };
题目来源:力扣(LeetCode)
798

被折叠的 条评论
为什么被折叠?



