给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
    示例 1:

    输入: s = “aba”
    输出: true
    示例 2:

    输入: s = “abca”
    输出: true
    解释: 你可以删除c字符。
    示例 3:

    输入: s = “abc”
    输出: false

    1. /**
    2. * @param {string} s
    3. * @return {boolean}
    4. */
    5. var validPalindrome = function (s) {
    6. let l = 0, r = s.length - 1;
    7. while (l < r) {
    8. if (s[l] !== s[r]) { // 指向的字符不一样,还不能死刑
    9. // 转为判断删掉一个字符后,是否回文
    10. return isPali(s, l + 1, r) || isPali(s, l, r - 1);
    11. }
    12. l++;
    13. r--;
    14. }
    15. return true;
    16. };
    17. function isPali(str, l, r) { // 判断str是否回文
    18. while (l < r) {
    19. if (str[l] !== str[r]) { // 指向的字符不一样,不是回文串
    20. return false;
    21. }
    22. l++; // 指针相互逼近
    23. r--;
    24. }
    25. return true; // 始终没有不一样,返回true
    26. }

    image.png