给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。
思路:贪心算法,找到一个结果直接返回啦,删除最左边一个,删除最右边一个,如果不满回文字符串,则进一步删除最左一个,删除最右边一个,直到出现一次满足条件的为止
固定了一个字符串后,如果判断是否是回文字符串呢???
使用双指针法则,但凡找到了对称的两个值不相等,直接返回false
function checkPalindrome(s, i, j) {
while (i < j) {
if (s[i] != s[j]) return false;
i++;
j--;
}
return true;
}
var validPalindrome = function (s) {
var left = 0;
var right = s.length - 1;
while (left < right) {
if (s[left] == s[right]) {
++left;
--right;
} else {
return (
checkPalindrome(s, left, right - 1) ||
checkPalindrome(s, left + 1, right)
);
}
}
return true;
};