名字验证(严校长报名字)
名字验证
题目描述
班主任有 n 个学生的名字(互不相同)。严校长依次报出 m 个名字,判断每个名字的情况:
- 正确且第一次出现 → 输出 OK
- 名字错误 → 输出 WRONG
- 正确但已出现过 → 输出 REPEAT
解题思路
核心思想
使用两个集合:
valid- 存放所有正确的学生名字answered- 存放已经正确回答过(输出过 OK)的名字
判断逻辑
对于每个报出的名字 s:
- 如果 s 不在 valid 中 → WRONG
- 如果 s 在 answered 中(已回答过OK)→ REPEAT
- 否则 → OK,并将 s 加入 answered
代码实现
n = int(input())
arr = set(input() for _ in range(n))
m = int(input())
c = set()
for _ in range(m):
s = input().strip()
if s in arr:
if s not in c:
print("OK")
c.add(s)
else:
print("REPEAT")
else:
print("WRONG")代码解析
arr = set(...):存放正确的学生名字,set 查找效率 O(1)c = set():存放已经输出过 OK 的名字- 判断顺序:先判断错误,再判断重复,最后判断首次正确
示例演示
输入:
5
a
b
c
ad
acd
3
a
a
e处理过程:
- 第1次:查询 “a”,在 arr 中且不在 c 中 → 输出 OK,c 变为 {a}
- 第2次:查询 “a”,在 arr 中且已在 c 中 → 输出 REPEAT
- 第3次:查询 “e”,不在 arr 中 → 输出 WRONG
输出:
OK
REPEAT
WRONG时间复杂度
- 创建集合:O(n)
- 每次查询:O(1)
- 总计:O(n + m)
名字验证(严校长报名字)
https://mingsm17518.github.io/2026/03/19/algorithm/solutions/2024_SDU_Star_Remake/03_name_check/