问题描述
小U正在检查某同学的选择题答案。试卷共有 n 道题目,每道题目只有两个选项 A 和 B。当前小U手上有两组答案:
s:该同学的原始答案。t:标准答案。
小U想知道,如果将该同学的所有答案都反选(即:如果某题的答案是 A 则改成 B,如果是 B 则改成 A),那么在反选之后,正确的答案数量是否会增加?具体结果有三种可能:
- 如果反选后的正确答案数 增加,输出 "yes"。
- 如果反选后的正确答案数 不变,输出 "draw"。
- 如果反选后的正确答案数 减少,输出 "no"。
测试样例
样例1:
输入:
n = 2,s = "AB",t = "AA"
输出:'draw'
样例2:
输入:
n = 3,s = "BAA",t = "ABB"
输出:'yes'
样例3:
输入:
n = 4,s = "ABAB",t = "BABA"
输出:'yes'
题解:
题解
我们需要通过对某同学的选择题答案进行分析,判断是否通过反选答案可以提高正确答案的数量。题目分为以下几个关键点:
-
原始答案与标准答案的比较:
- 计算原始答案与标准答案中相同的题目数(即当前正确答案数)。
-
反选后的答案与标准答案的比较:
- 反选后,原始答案中的 A 替换为 B,B 替换为 A。
- 比较反选后的答案与标准答案中相同的题目数。
-
比较正确答案数量的变化:
- 如果反选后的正确答案数多于原始正确答案数,输出
yes。 - 如果反选后的正确答案数等于原始正确答案数,输出
draw。 - 如果反选后的正确答案数少于原始正确答案数,输出
no。
- 如果反选后的正确答案数多于原始正确答案数,输出
解题思路
-
初始化计数器:
- 计算原始答案的正确数
original_correct。 - 初始化反选后的正确数
flipped_correct。
- 计算原始答案的正确数
-
遍历答案字符串:
-
对于每一题:
- 如果原始答案与标准答案相同,则
original_correct增加。 - 如果反选后的答案与标准答案相同,则
flipped_correct增加。
- 如果原始答案与标准答案相同,则
-
-
比较两个正确数:
- 通过
flipped_correct与original_correct的比较得出最终的结果。
- 通过
代码实现
def solution(n: int, s: str, t: str) -> str:
# 计数器初始化
original_correct = 0
flipped_correct = 0
# 遍历所有题目
for i in range(n):
# 原始答案正确计数
if s[i] == t[i]:
original_correct += 1
# 反选答案
flipped_answer = 'A' if s[i] == 'B' else 'B'
# 反选答案正确计数
if flipped_answer == t[i]:
flipped_correct += 1
# 比较反选与原始正确数
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') # 测试样例1
print(solution(3, "BAA", "ABB") == 'yes') # 测试样例2
print(solution(4, "ABAB", "BABA") == 'yes') # 测试样例3
测试结果分析
样例 1
输入:
n = 2, s = "AB", t = "AA"
分析:
- 原始答案正确数:
s[0] == t[0] (1) - 反选答案正确数:
flipped_s[1] == t[1] (1) - 两者正确数相同,结果为
'draw'。
输出:draw
样例 2
输入:
n = 3, s = "BAA", t = "ABB"
分析:
- 原始答案正确数:
s[2] == t[2] (1) - 反选答案正确数:
flipped_s[0] == t[0] (1),flipped_s[1] == t[1] (1)共2。 - 反选后的正确数大于原始正确数,结果为
'yes'。
输出:yes
样例 3
输入:
n = 4, s = "ABAB", t = "BABA"
分析:
- 原始答案正确数:无,
0。 - 反选答案正确数:
flipped_s[0] == t[0] (1),flipped_s[1] == t[1] (1),flipped_s[2] == t[2] (1),flipped_s[3] == t[3] (1)共4。 - 反选后的正确数大于原始正确数,结果为
'yes'。
输出:yes
时间复杂度与空间复杂度
-
时间复杂度:
- 遍历一次答案字符串,复杂度为 O(n)O(n)。
-
空间复杂度:
- 使用常数额外空间,复杂度为 O(1)O(1)。
总结
通过遍历答案,分别统计原始与反选后的正确答案数,直接进行比较,得出结果。代码简洁高效,能够应对任意合法输入。