CodeSignal问题:Kotlin代码未校验列表元素合法性的错误修复
修复Kotlin列表元素合法性校验问题
需求回顾
给定字符串列表,需满足以下条件时返回"a"的出现占比:
- 所有元素只能是"a"或"b"
- 列表中至少包含一个"a"和一个"b"
若存在非法元素(如"A"、"c"等),或不满足上述任一条件,返回-1.0。
原代码问题
提供的代码仅检查了列表中是否同时存在"a"和"b",但未校验所有元素是否都是合法的"a"或"b",导致包含非法元素的列表仍可能错误返回占比值。
错误代码:
fun solution(list: MutableList<String>): Double { return if ("a" in list && "b" in list) { (list.count { it == "a" }.toDouble() / list.size) } else { -1.0 } }
修复方案
新增对所有元素合法性的校验,确保每个元素只能是"a"或"b",再结合原有的"a"和"b"同时存在的判断,最终返回正确结果。
修复后的代码:
fun solution(list: MutableList<String>): Double { val allValid = list.all { it == "a" || it == "b" } return if (allValid && "a" in list && "b" in list) { list.count { it == "a" }.toDouble() / list.size } else { -1.0 } }
测试示例
- 输入
["a","b","a"]→ 返回0.6666666666666666 - 输入
["a","b","c"]→ 返回-1.0(存在非法元素"c") - 输入
["a","a"]→ 返回-1.0(缺少"b") - 输入
["b"]→ 返回-1.0(缺少"a") - 输入
["A","b"]→ 返回-1.0(存在非法元素"A")
内容的提问来源于stack exchange,提问作者clownprogrammer
相关产品推荐
相关产品推荐

