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

Kotlin实现回文字符串验证时测试用例不通过问题排查

问题排查与修复

你的代码核心问题是提前计算了n1的值:

  • 你在初始化myStringBuilder后立刻赋值n1=myStringBuilder.length,此时myStringBuilder是空的,n1的值为0。
  • 后续的回文判断循环for( i in 0 .. (n1/2)-1)因为(0/2)-1 = -1,循环条件不成立,直接跳过所有判断逻辑,直接返回true,这就是测试用例s = "race a car"得到错误结果的原因。

修复后的代码

把n1=myStringBuilder.length的赋值语句移到填充完myStringBuilder之后,确保n1是处理后有效字符串的长度:

class Solution {
    fun isPalindrome(s: String): Boolean {
        var s1 = s.toLowerCase()
        var myStringBuilder = StringBuilder()
        var n = s1.length - 1

        for (i in 0..n) {
            if (Character.isLetterOrDigit(s1[i])) {
                myStringBuilder.append(s1[i])
            }
        }
        
        // 移到此处,获取处理后的有效字符串长度
        var n1 = myStringBuilder.length
        for (i in 0..(n1/2)-1) {
            if (myStringBuilder[i] != myStringBuilder[n1 - i - 1]) {
                return false
            }
        }
        return true
    }
}

简化优化建议

利用Kotlin的内置函数可以大幅简化代码逻辑,同时保证可读性:

class Solution {
    fun isPalindrome(s: String): Boolean {
        val filtered = s.lowercase().filter { it.isLetterOrDigit() }
        return filtered == filtered.reversed()
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:25:04