使用JavaScript递归法判断回文:如何处理特殊字符与空格?
解决JavaScript递归回文判断中特殊字符与空格的问题
你的递归回文判断逻辑本身没问题,但直接用原字符串比对时,特殊字符、空格以及大小写差异会导致判断错误。要解决这个问题,需要先对输入字符串做预处理:移除所有非字母数字的字符,并统一转为小写(回文判断通常不区分大小写)。
修改后的代码
function isPalindromeHelper(left, right, str) { if (left >= right) return true; if (str[left] !== str[right]) return false; return isPalindromeHelper(left + 1, right - 1, str); } function isPalindrome(s) { // 预处理:移除非字母数字字符,转小写 const processedStr = s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase(); return isPalindromeHelper(0, processedStr.length - 1, processedStr); } // 测试验证 console.log(isPalindrome("A man, a plan, a canal: Panama")); // true console.log(isPalindrome("radar")); // true console.log(isPalindrome('amanaplanacanalpanama')); // true console.log(isPalindrome("race a car")); // false console.log(isPalindrome('pala')); // false
关键说明
- 正则表达式
/[^a-zA-Z0-9]/g:匹配所有非字母、非数字的字符,g表示全局匹配,确保所有符合条件的字符都被移除。 toLowerCase():将处理后的字符串统一转为小写,避免大小写不一致导致的误判(比如原字符串中的"A"和"a"会被视为不同字符)。- 预处理后的字符串仅保留有效字符,再传入递归辅助函数进行比对,就能得到正确的回文判断结果。
内容的提问来源于stack exchange,提问作者MeAtWork
相关产品推荐
相关产品推荐

