680. 验证回文字符串 Ⅱ
解题思路:
这道题时改编回文字串的题,直接暴力判断会超时,所以要想办法在线性时间内解决,由于题目限制只能删除一个字符,这个时候我们可以在第一次双指针不匹配的时候选择性删除某一面的字符,两次判断是否为回文字串,如果都不行则返回false,如果删除某一面的字符可以符合要求,就返回true,显然应该使用 || 来判断最后的结果
源代码:
/**
* @param {string} s
* @return {boolean}
*/
var judge = function(s){
var i = 0, j = s.length-1;
while(i < j){
if(s[i] != s[j]) return false;
i++;j--;
}
return true;
};
var validPalindrome = function(s) {
var i = 0, j = s.length - 1;
var index = 0;
while(i < j){
if(index == 0 && s[i] != s[j]){
break;
}
i++;j--;
}
var str_tmp = s;
str_tmp = (s.slice(0,i) + s.slice(i+1, s.length));
var l = judge(str_tmp);
str_tmp = (s.slice(0,j) + s.slice(j+1, s.length));
var r = judge(str_tmp);
return l || r;
};