Kotlin字符串压缩函数遗漏末尾字符问题求助
问题分析与修复
你的代码核心问题是循环没有处理最后一组连续字符:循环范围是0 until s.length - 1,也就是只遍历到倒数第二个字符,当循环结束时,最后一组字符(不管是单个还是重复多个)都没有被追加到结果字符串中,这就是为什么a、x这类位于字符串末尾的字符会被遗漏。
修复后的代码
fun sCompression(s: String): String { if (s.isEmpty()) return "" // 处理空字符串边界情况 val solution = StringBuilder() var count = 1 for (i in 0 until s.length - 1) { if (s[i] == s[i + 1]) { count++ } else { solution.append("${s[i]}$count") count = 1 } } // 追加最后一组字符 solution.append("${s.last()}$count") return solution.toString() }
关键修改点
- 新增空字符串判断:避免空输入导致的索引越界问题
- 改用
StringBuilder拼接字符串:比直接用String.plus()效率更高,尤其适合长字符串场景 - 循环结束后追加最后一组字符:补上原代码遗漏的末尾字符统计
测试后可覆盖你给出的所有预期输出,比如针对Out3的输入,循环结束后会把最后一个x和对应的count=2追加到结果中,最终得到a2b3c6d11u6x2,完全符合预期。
内容的提问来源于stack exchange,提问作者OEThe11
相关产品推荐
相关产品推荐

