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;
};