PAT乙级_1093 字符串A+B_Python_AC解法_含疑难点
注意事项:
因为笔者的编程水平以自学为主,代码结构可能比较混乱、变量命名可能不够规范。
文章中的AC解法不一定最优,并且包含笔者强烈的个人风格,不喜勿喷,但欢迎在评论中理性讨论或者给出提升建议。
文章中提到的疑难点仅为个人在刷题过程中所遇到的情况,如有读者存在其他疑难点,欢迎在评论中加以补充,笔者会尽量将其加入到文章内容中。
合集:
PAT乙级_合集_Python_AC解法
题目:
1093 字符串A+B
题目描述:
给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集。要求先输出 A,再输出 B,但重复的字符必须被剔除。
输入格式:
输入在两行中分别给出 A 和 B,均为长度不超过 10^6的、由可见 ASCII 字符 (即码值为32~126)和空格组成的、由回车标识结束的非空字符串。
输出格式:
在一行中输出题面要求的 A 和 B 的和。
输入样例:
This is a sample test
to show you_How it works
输出样例:
This ampletowyu_Hrk
代码限制:
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
AC解法:
# 获取输入数据
a = input() # 第一行输入的字符串 a
b = input() # 第二行输入的字符串 b# 处理结果并输出
t = set() # 创建空集合用于去重判断
res = [] # 创建空列表用于答案存储
for c in a + b: # 遍历 a b 合并后的字符串中的各个字符if c not in t: # 若该字符不在集合 t 中t.add(c) # 将该字符加入集合 tres.append(c) # 将该字符加入答案表 res
print(''.join(res)) # 拼接答案表输出结果
题目解读:
本题描述比较易懂。
先获取输入的两个字符串,将其拼接后再在保持原顺序的情况下去重,最后输出结果。
疑难点:
测试点3、测试点4运行超时
这两个测试点超时是因为判断去重时不应该使用列表,列表中执行查找操作的时间复杂度是 O(n) 。应该采用字典或者集合,这两种数据类型查找操作的时间复杂度是 O(1) 。
其他解法
上文给出的AC解法的内存占用约7800kb、耗时约140ms。
以下AC代码性能更好,内存占用约7800kb、耗时约75ms。
a = input() b = input() print(''.join(list(dict.fromkeys(a + b))))