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

Kotlin递归实现LeetCode isSubsequence问题报错排查求助

问题分析与修复方案

核心问题

你的代码存在两个关键错误,导致递归逻辑失效:

  1. 全局变量误用:你定义了全局的first和second常量,但isSubsequence函数本身接收了同名参数,递归函数subCheck直接使用全局值,完全忽略了函数调用时传入的参数,逻辑上出现了参数隔离错误。
  2. 递归分支结果未返回:当first[s] == second[t]时,你仅调用了subCheck(s-1, t-1),但没有将该分支的返回结果向上传递。这意味着即使这个分支匹配成功(返回true),代码仍会继续执行后续的return subCheck(s, t-1),覆盖了正确结果。

修正后的代码

fun isSubsequence(first: String, second: String): Boolean {
    if (first.isEmpty()) return true
    if (second.isEmpty()) return false
    return subCheck(first, second, first.length - 1, second.length - 1)
}

fun subCheck(sStr: String, tStr: String, s: Int, t: Int): Boolean {
    if (s == -1) return true
    if (t == -1) return false
    return if (sStr[s] == tStr[t]) {
        // 字符匹配时,递归检查前一位
        subCheck(sStr, tStr, s - 1, t - 1)
    } else {
        // 不匹配时,仅移动第二个字符串的指针
        subCheck(sStr, tStr, s, t - 1)
    }
}

fun main() {
    println(isSubsequence("abc", "ahbgdc")) // 输出 true
}

修正说明

  • 移除全局变量,将first和second作为参数传递给subCheck,确保递归使用的是函数调用时的输入值。
  • 当字符匹配时,直接返回subCheck(s-1, t-1)的结果,让匹配成功的结果能沿着递归链向上传递;只有当不匹配时,才进入移动第二个字符串指针的分支。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 06:06:24