【魅力算法】'验证回文串' 双指针&正则实现 |刷题打卡

143 阅读1分钟

题目描述

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

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

示例 1:

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

输入: "race a car"
输出: false

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

正则&&双指针

  • 正则表达式全集
  • 正则表达式去除无效字符/[^A-Za-z0-9]/g
  • 使用replace()替换无效匹配字符后,将所有的字符转化为小写
  • 左右指针left right对字符串s遍历,遍历条件为left<right;

代码

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
  // 正则去掉字符串中的无效字符;
   s=s.replace(/[^A-Za-z0-9]/g,'').toLowerCase();
  // 双指针
  let left=0,right=s.length-1;
  while(left<right){
      if(s[left]!==s[right]){
          return false;
      }
      left++;
      right--;
  }
  return true;

};

正则&&字符串反转

  • 通过str.split();array.reverse();array.join()的api得到反转后的字符串;
  • 如果temp===s则为回文串

代码

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
  // 正则去掉字符串中的无效字符;
   s=s.replace(/[^A-Za-z0-9]/g,'').toLowerCase();
  let  temp=s.split('').reverse().join('');
  return temp===s?true:false;
};