数据结构与算法之LeetCode-125.验证回文串(正则匹配与双指针)

72 篇文章 0 订阅
42 篇文章 0 订阅

欢迎查看和关注一个开源的个人学习计算机科学知识成长记录(前后端,数据结构与算法)

125. 验证回文串 - 力扣(LeetCode) (leetcode-cn.com)
解法
  • 利用正则表达式 只保留数字和字符
let newS = s.toLowerCase().match(/[a-z0-9]+/g);
console.log(newS);// ['i','am', 'bill', 'llib', 'ma', ]
// 使用match方法在字符串内索引指定值/找到一个或多个正则表达式的匹配
// 查找从a到z的字符,并返回匹配值
var isPalindrome = function(s){
  // 正则匹配
  let isValid = s.toLowerCase().match(/[a-z0-9]+/g);
  if(!valid){
    return true;
  }
  let str = valid.join(''); // 数据预处理
  let comp = str.split('').reverse('').join('');
  return comp === str;
}
  • 双指针

最开始想到了用数组来存储有用的数据,然后再用双指针去左右取值,遇到不想等的情况就返回结果:

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
    s = s.toLowerCase();
    let str = []
    for(let i=0;i<s.length;i++){
        if(('a'<=s[i]&&s[i]<='z')||('0'<=s[i]&&s[i]<='9')){
            str.push(s[i])
        }
    }

    let start = 0, end = str.length-1;

    while(start<end){
        if(str[start]!==str[end]){
            return false;
        }
        start++;
        end--;
    }
    return true;
};

执行结果:通过

执行用时:84 ms, 在所有 JavaScript 提交中击败了48.33%的用户

内存消耗:44.9 MB, 在所有 JavaScript 提交中击败了25.59%的用户

通过测试用例:480 / 480

下面是其他大神的解法:

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
	let str = s.toLowerCase();
  let i = 0;
  let j = str.length - 1;
  while(i<j){
    if(!isValid(i)){
    	 i++;
       continue;
    }
    
    if(!isValid(j)){
      j--;
      continue;
    }
    
    if(str[i]!==str[j]){
      return false;
    }
    
    i++;
    j--;
  }
  return true;
};

var isValid = function(str){
  return (str>='a'&&str<='z')||(str>='0'&&str<='9');
}
参考链接

125. 验证回文串 - 力扣(LeetCode) (leetcode-cn.com)

验证回文串 - 验证回文串 - 力扣(LeetCode) (leetcode-cn.com)

用时 99.58% 先处理成只有需要判断的字符 - 验证回文串 - 力扣(LeetCode) (leetcode-cn.com)

【JavaScript 注释齐全】三种经典方法( reverse+双指针+栈)解决经典题-验证回文串 - 验证回文串 - 力扣(LeetCode) (leetcode-cn.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值