1029 旧键盘 (20 分)
题意描述:
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
输入格式:
输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _(代表空格)组成。题目保证 2 个字符串均非空。
输出格式:
按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。
输入样例:
7_This_is_a_test
_hs_s_a_es
输出样例:
7TI
解题思路:
Alice: 元芳,你怎么看 ?
Bob: 大人,这道题目看似简单,倒是有些蹊跷啊 ~
Alice: 何处蹊跷 ?难道是键盘的使用者心猿意马,倒以为是键盘有问题 !
Bob: 非也,题目中说对应的字符不会出现,那么会不会出现不对应的字符呢 ?或者说有些坏键对应没有输出,有些坏键对应输出了别的字符。
Alice: 哦 ?
Bob: 大人,我们可以尝试这两种可能。
Alice: 哦 ?她爱你或者不她爱你吗 ?
Bob: 大人莫要取笑卑职了 ;— ) 就这个案子,我们可以先从 对应的字符没有输出查起。毕竟这是比较简单的一种情况。
Alice: 元芳啊,你可真令我刮目相看了。注意坏键的给出要按照它们出现的顺序来。
Bob: 是,大人。
Alice: 孺子可教,速去速回。
Bob: 卑职告辞 ~~~。
代码:
def main():
string1 = input().upper()
# 接收原本要输入的字符串
string2 = input().upper()
# 接收坏键盘的输入结果
res = set(string1) - set(string2)
# 得到那些在string1中出现而没有在string2中出现的字符,结合题意就是原本要输入但是没有显示的那些字符。
# Python 中的set这一类型,就是集合类型,可以传入一个列表或者可迭代对象。
# set的结果满足,单一,无序,有限的特性,set尤其擅长去除重复元素。
answer = ""
# 根据题意,需要按照字符出现的顺序给出坏键。
for x in string1:
# 按照字符出现的顺序找到所有的坏键
if len(res) > 0 and x in res:
# 如果 某个 字符在 res中出现,那就一定是一个坏键
answer += x
res.remove(x)
# 找到一个坏键,把它添加到答案中。然后去除这个坏键,因为每个坏键只输出一次。
elif len(res) == 0:
#没有坏键就直接退出吧
break
print(answer)
if __name__ == '__main__':
main()
易错点:
- 题目中,坏键对应的字符就不会出现可以理解为输出为 “” ,而不会输出其他错误的字符。
- 坏键要按照其在 原计划输入的字符串 中出现的顺序给出。
总结: