SOURCE

// 判断字符串是否为回文
function isRerse(str) {
    const len = str.length;
    for(var i = 0; i < len / 2; i ++) {
        if (str[i] !== str[len - i - 1]) {
            return false;
        }
        return true;
    }
}

// console.log(isRerse('abba'));
// console.log(isRerse('fhfhfhfhfhfsxc'));

// 扭转字符串 也可以用这个api直接判断字符串是否为回文字符串
const a = 'juejin';
a.split('').reverse().join('')
// console.log(a)
// console.log(a.split('').reverse().join(''))

// 给定一个非空字符串s,最多删除一个字符,判断是否能成为回文字符串;
// 例如 'agbba' 删掉g 就能成为回文
// 思路: 双指针法,指向字符串头部,跟尾部 2个位置;对比是否相等
// 如果相等,那么指针向内部继续前进,再比较;
// 如果不相等,那么考虑“删掉左边,左指针向右移一位” 然后再对新区间判断是否为回文,如果成功,那删掉左边;
// 如果不成功,那么考虑“删掉右边,右指针向左移一位” 同样判断;
// 左右都判断完 都不能成为回文; 那得到结果:删掉一个字符 并不能成为回文字符串

const validPalindrome = (str) => {
    const len = str.length;

    // 初始化左右2个指针
    let l = 0;
    let r = len -1;

    while (l < r && str[l] === str[r]) {
        l ++;
        r --;
    }

    if (isPalindrome(l + 1, r)) {
        return true;
    }

    if (isPalindrome(l, r - 1)) {
        return true;
    }

    return false;
    

    function isPalindrome(lt, rt) {
        while(lt < rt) {
            if (str[lt] !== str[rt]) {
                return false;
            }
            lt ++;
            rt --;
        }
        return true;
    }
};

console.log(validPalindrome('aasubb'))
console.log(validPalindrome('ansdna'))
console.log(validPalindrome('abba'));
console.log(validPalindrome('abjjfvtdjba'));


console 命令行工具 X clear

                    
>
console