问题描述
小U正在检查某同学的选择题答案。试卷共有 n 道题目,每道题目只有两个选项 A 和 B。当前小U手上有两组答案:
s:该同学的原始答案。t:标准答案。
小U想知道,如果将该同学的所有答案都反选(即:如果某题的答案是 A 则改成 B,如果是 B 则改成 A),那么在反选之后,正确的答案数量是否会增加?具体结果有三种可能:
- 如果反选后的正确答案数 增加,输出 "yes"。
- 如果反选后的正确答案数 不变,输出 "draw"。
- 如果反选后的正确答案数 减少,输出 "no"。
问题理解
- 有两个数组,其中一个数组为标准答案,需要比较两个数组相同位置上的元素是否相同,统计相同元素的个数
- 每道题目只有2个选项,说明只用统计相同元素就行,反选可以由
n - 相同元素个数直接得出
解题思路
- 定义初始变量
correctNum,用于统计两数组同一位置相同元素的个数 - 由于测试样例都不可能为空,所以先将字符串转化为字符数组,便于后续直接根据索引获取指定位置元素
- 任取一个数组进行遍历(两个数组长度相同,可以看作有映射关系,取哪个都一样)
- 如果同一位置上两个数组的字符相同,计数增加1
- 循环结束,
correctNum已统计完两数组同一位置相同元素的个数 - 定义字符串变量
result,用于输出结果 - 比较是当前
correctNum更大,还是反选更大 - 当前更大不需要反选,输出
no,等大输出draw, 反选更大需要反选输出yes
代码详解
public static String solution(int n, String s, String t) {
// 1 统计两数组同一位置相同元素的个数
int correctNum = 0;
char[] sArray = s.toCharArray();
char[] tArray = t.toCharArray();
for (int i = 0; i < tArray.length; i++) {
// 2 同位置元素相同,计数增加1
if (sArray[i] == tArray[i]) {
correctNum += 1;
}
}
// 3 输出结果
String result;
if (correctNum < n - correctNum) {
result = "yes";
} else if (correctNum > n - correctNum) {
result = "no";
} else {
result = "draw";
}
return result;
}
复杂度计算
空间复杂度:O(n), n是题目给定字符串的长度,需要将字符串转化为char类型数组,开辟2n个空间
时间复杂度:O(n),n是题目给定字符串的长度,需要遍历数组长度次
总结
知识点:
- 字符串操作:遍历和字符数组的转换和操作。
- 条件判断,计数器
- 本题先将字符串转为字符数组(
char[])来存储和操作答案字符串,相较于直接通过字符串截取性能更号,且更方便取逐个字符比较。
作者:Hewson
链接:juejin.cn/post/744077…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。