伴学笔记 选择题的反选分析 | 豆包MarsCode AI刷题

14 阅读3分钟

一、题目解析

题目描述
小U正在检查某同学的选择题答案,她使用了一种特殊的方式,通过反选答案来验证正确答案的变化情况。反选答案是将学生原答案改为标准答案的相反选择,从而观察正确数量的增减趋势:

  1. 反选后的正确答案数增加:输出 "yes"
  2. 反选后的正确答案数不变:输出 "draw"
  3. 反选后的正确答案数减少:输出 "no"

分析思路

要解决这个问题,我们可以通过以下几个步骤进行分析和实现:

  1. 统计原始正确答案数

    • 遍历每道题,比较学生答案和标准答案,统计两者相同的数量,即为原始正确答案数。
  2. 统计反选后的正确答案数

    • 对于原答案正确的题目,反选后将变为错误,不计入反选正确数。
    • 对于原答案错误的题目,反选后将变为正确,因此统计两者不同的数量作为反选正确答案数。
  3. 比较原始与反选正确答案数

    • 通过比较两者数量,得出相应的输出结果。

二、代码详解

以下是实现这一功能的Python代码:

python

def solution(n: int, s: str, t: str) -> str:
    """
    根据原始答案和反选答案的比较,判断正确答案数的变化趋势。

    参数:
    n: int - 题目数量
    s: str - 学生答案
    t: str - 标准答案

    返回:
    str - "yes" / "draw" / "no"
    """
    # 统计原始正确答案数
    original_correct = 0
    # 统计反选后的正确答案数
    flipped_correct = 0

    for i in range(n):
        if s[i] == t[i]:  # 原始答案正确
            original_correct += 1
        else:  # 原始答案错误,反选后正确
            flipped_correct += 1

    # 比较两者数量关系
    if flipped_correct > original_correct:
        return 'yes'  # 反选后正确答案数增加
    elif flipped_correct == original_correct:
        return 'draw'  # 正确答案数保持不变
    else:
        return 'no'  # 反选后正确答案数减少

测试用例

python

if __name__ == '__main__':
    # 测试用例 1
    print(solution(2, "AB", "AA") == 'draw')  # 原答案和反选均正确1题

    # 测试用例 2
    print(solution(3, "BAA", "ABB") == 'yes')  # 反选后增加到2题正确

    # 测试用例 3
    print(solution(4, "ABAB", "BABA") == 'yes')  # 反选后正确答案数增加到4

    # 测试用例 4
    print(solution(5, "AAAAA", "BBBBB") == 'yes')  # 全部反选后增加正确数

三、知识总结

  1. 字符串的逐字符对比

    • 字符串是一种序列数据类型,通过索引可以逐字符操作,例如 s[i] 表示字符串的第 i 个字符。
  2. 双向统计逻辑

    • 原始正确数:统计相同字符数。
    • 反选正确数:通过统计不同字符数,间接计算反选效果。
  3. 时间复杂度与空间复杂度

    • 单次遍历字符串即可完成统计,时间复杂度为 O(n)
    • 无需额外数据结构,空间复杂度为 O(1)
  4. 逻辑分支的简化处理

    • 通过 if-elif-else 条件分支清晰表达逻辑结果。

四、扩展与思考

  1. 多样化测试场景

    • 例如输入字符串长度较大时,测试代码的效率是否保持稳定。
    • 验证反选逻辑在极端情况下(如完全正确或完全错误)是否正常工作。
  2. 优化空间复杂度

    • 虽然当前解法已达到常数空间复杂度,但理解无状态统计的方式,对进一步优化复杂算法有重要意义。
  3. 适配其他问题类型

    • 这一逻辑可以扩展至其他问题场景,如字符匹配、选项纠错等。

五、总结

通过本题,我们重点掌握了字符串逐字符操作逻辑判断复杂度分析等关键技能。本题的代码实现简单直观,清晰的逻辑结构为日后应对类似题目提供了参考模板。同时,通过多种测试用例的设计和代码优化,进一步巩固了编程基础与实践能力。