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
相关产品推荐
相关产品推荐

