Kotlin递归实现LeetCode isSubsequence问题报错排查求助
问题分析与修复方案
核心问题
你的代码存在两个关键错误,导致递归逻辑失效:
- 全局变量误用:你定义了全局的
first和second常量,但isSubsequence函数本身接收了同名参数,递归函数subCheck直接使用全局值,完全忽略了函数调用时传入的参数,逻辑上出现了参数隔离错误。 - 递归分支结果未返回:当
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
相关产品推荐
相关产品推荐

