leetcode每日一题(2020-05-19):680. 验证回文字符串 Ⅱ

题目描述:
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。

今日学习:
1.正则表达式

题解1:前置题目:125.验证回文串

var isPalindrome = function(s) {
//调用API
//var arr = s.replace(/[^w]/g, '').toLowerCase().split('');
//return arr.join() === arr.reverse().join();

//双指针
    var strArr = s.replace(/[^w]/g, "").toLowerCase().split("");
    var left = 0, right = strArr.length - 1;
    while(left < right){
        if(strArr[left] != strArr[right]){
            return false;
        }
        left++;
        right--;
    }
    return true;
};

题解2:这次我的思路对了,不过还是没考虑周全,l+1和r+1哪里开始想的是用if,后来参考题解用了或

//辅助函数
var validPalindrome = function(s) {
    var l = 0, r = s.length - 1;
    while(l < r){
        if(s[l] != s[r]){
            return isPali(s, l + 1, r) || isPali(s, l, r - 1)
        }
        l++;
        r--;
    };
    return true;
    function isPali(str, l, r) { // 辅助函数
    while (l < r) { // 指针相遇 结束循环
        if (str[l] !== str[r]) { // 一票否决
        return false 
        }
        l++ // 指针挪动,相互逼近
        r--
    }
    return true // 没有遇到不同,返回true
    }
};
原文地址:https://www.cnblogs.com/autumn-starrysky/p/12917254.html