题目描述:
给定一个非空字符串 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
}
};