LeetCode笔记:验证回文串

问题

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

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

示例 1:

输入: "A man, a plan, a canal: Panama"

输出: true

示例 2:

输入: "race a car"

输出: false

解法

思路:

  1. 先将非数字和字母的字符去除
  2. 循环这个新的字符串,判断从开始和结束位置移动相同距离后的字符串是否相同,全部相同则结果是为回文串,有任何一组字符串不同,则不是回文串

代码:

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function (s) {
  // 只保留数字和字母
  const str = s.replace(/[^0-9a-zA-Z]*/g, "").toLowerCase();

  // 循环到一半位置即可
  for (let i = 0; i < (str.length - 1) / 2; i++) {
    // 对比前后同样位置的数值,有任何一对数值不同即不是回文数组
    if (str[i] !== str[str.length - i - 1]) {
      return false;
    }
  }

  return true;
};

参考

评论