问题描述
小U正在检查某同学的选择题答案。试卷共有 n 道题目,每道题目只有两个选项 A 和 B。当前小U手上有两组答案:
s:该同学的原始答案。t:标准答案。
小U想知道,如果将该同学的所有答案都反选(即:如果某题的答案是 A 则改成 B,如果是 B 则改成 A),那么在反选之后,正确的答案数量是否会增加?具体结果有三种可能:
- 如果反选后的正确答案数 增加,输出 "yes"。
- 如果反选后的正确答案数 不变,输出 "draw"。
- 如果反选后的正确答案数 减少,输出 "no"。
解题思路
-
理解问题:
- 题目要求比较两组答案
s和t,并判断如果将s中的所有答案反选后,正确的答案数量是否会增加、不变或减少。
- 题目要求比较两组答案
-
数据结构选择:
- 使用字符串来表示答案序列
s和t。
- 使用字符串来表示答案序列
-
算法步骤:
- 计算原始答案
s与标准答案t的匹配数量original_correct。 - 计算反选后的答案
s与标准答案t的匹配数量flipped_correct。 - 比较
original_correct和flipped_correct:- 如果
flipped_correct>original_correct,输出 "yes"。 - 如果
flipped_correct==original_correct,输出 "draw"。 - 如果
flipped_correct<original_correct,输出 "no"。
- 如果
- 计算原始答案
-
关键点:
- 反选答案可以通过将
s中的每个字符与A和B进行比较,然后取反。 - 计算匹配数量时,可以直接遍历字符串并比较对应位置的字符。
- 反选答案可以通过将
代码实现
def solution(n: int, s: str, t: str) -> str:
original_correct = sum(1 for i in range(n) if s[i] == t[i])
flipped_correct = sum(1 for i in range(n) if s[i] != t[i])
if flipped_correct > original_correct:
return "yes"
elif flipped_correct == original_correct:
return "draw"
else:
return "no"
if __name__ == '__main__':
print(solution(2, "AB", "AA") == 'draw')
print(solution(3, "BAA", "ABB") == 'yes')
print(solution(4, "ABAB", "BABA") == 'yes')
测试样例
- 样例1:
- 输入:
n = 2, s = "AB", t = "AA" - 输出:
'draw'
- 输入:
- 样例2:
- 输入:
n = 3, s = "BAA", t = "ABB" - 输出:
'yes'
- 输入:
- 样例3:
- 输入:
n = 4, s = "ABAB", t = "BABA" - 输出:
'yes'
- 输入:
总结
- 通过计算原始答案和反选后的答案与标准答案的匹配数量,可以判断反选后正确答案数量的变化情况。
- 代码实现简单,时间复杂度为 O(n),适用于大多数情况。