编辑代码

// 递归方式
function isPalindromeRecursive(str) {
    // 去除字符串中的空格和特殊字符,将字符串转换为小写以进行不区分大小写的比较
    const cleanedStr = str.toLowerCase().replace(/[^a-z0-9]/g, '');

    // 递归基本情况
    if (cleanedStr.length <= 1) {
        return true;
    }

    // 检查首尾字符是否相同
    if (cleanedStr[0] !== cleanedStr[cleanedStr.length - 1]) {
        return false;
    }

    // 递归检查去掉首尾字符的子字符串
    return isPalindromeRecursive(cleanedStr.slice(1, cleanedStr.length - 1));
}

const str = "A man, a plan, a canal, Panama";
console.log(`递归方式:"${str}" 是回文字符串吗? ${isPalindromeRecursive(str)}`);

// 递推方式
function isPalindromeIterative(str) {
    const cleanedStr = str.toLowerCase().replace(/[^a-z0-9]/g, '');
    let left = 0;
    let right = cleanedStr.length - 1;

    while (left < right) {
        if (cleanedStr[left] !== cleanedStr[right]) {
            return false;
        }
        left++;
        right--;
    }

    return true;
}

console.log(`迭代方式:"${str}" 是回文字符串吗? ${isPalindromeIterative(str)}`);