Skip to content

力扣链接:125.验证回文串

难度:⭐

解题关键词:双指针

解题思路:前后指针,如果碰到非数字字母的,跳过,对比前后两个字母,不相等的话就直接返回 false,如果相等继续对比。

typescript
function isPalindrome(s: string): boolean {
  let left = 0;
  let right = s.length - 1;

  while (left <= right) {
    if (!isValid(s[left])) {
      left++;
      continue;
    } else if (!isValid(s[right])) {
      right--;
      continue;
    } else if (s[left].toLowerCase() !== s[right].toLowerCase()) {
      return false;
    }

    // 前后相等,前后指针都移动
    left++;
    right--;
  }

  return true;
}

// 如果是字母/数字就是合法的
const isValid = (char: string) => {
  return /[a-z]|[0-9]/i.test(char);
};