You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript递归回文判断时slice切片跳过首元素返回错误结果排查

问题成因分析

核心错误共有三点:

  • 递归传参逻辑错误:你每次递归调用时传入的是未经过滤的原始带空格输入string的切片,而非已经完成特殊字符、空格过滤的净化后字符串。原始输入包含大量空格,你对带空格的字符串执行slice(1,-1)操作,每次切掉的并非净化后字符串的首尾字符,就是你日志中观察到“跳过首元素切片”现象的根本原因。
  • 未统一字符大小写:现有过滤逻辑仅去除了非字母数字字符,没有做大小写统一转换,示例输入首尾的A和a会被判定为不同字符,本身也会导致回文判断错误。
  • 基线条件覆盖不全:现有逻辑只处理了长度为2时两字符不等的场景,未处理长度为2且两字符相等的合法回文场景,会导致这类情况进入无效递归,最终返回错误结果。
修复后可正常运行的代码
function palindrome(string) {
  // 过滤非字母数字字符,同时统一转为小写
  let str = string.replace(/[^A-Za-z0-9]/g, '').toLowerCase()
  // 基线条件补全
  if (str.length <= 1) return true
  if (str.length === 2) return str[0] === str[1]
  // 首尾字符相等时,递归传入砍掉首尾的净化后字符串
  if (str[0] === str[str.length - 1]) {
    return palindrome(str.slice(1, -1))
  }
  // 首尾不等直接判定为非回文
  return false
}
console.log(palindrome("Anne I vote more cars race Rome to Vienna")) // 输出true

内容的提问来源于stack exchange,提问作者Milos Popovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:39:04