链接:https://ac.nowcoder.com/acm/problem/21805
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
给你两个长度相同的字符串a,b,现在已知b是a编码之后的结果
比如a = “CAT”, b = “DOG”, 那么D其实是C,O其实是A,G其实是T
现在给你一个字符串c,如果c能够被解码出来,输出c解码后的字符串,如果不能输出@
输入描述:
输入三行,每行一个字符串,长度在50以内
输出描述:
输出一个字符串
这里需要注意的是如果给出了25个字母,那么剩下的这个字母的解码情况是可以推导出来的。
a = input()
b = input()
c = input()
l = []
n = len(a)
for i in range(n):
l.append(b[i])
res = ""
d = dict(zip(b,a))
all = set('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
m = len(set(b))
# 如果给出了25个字母,那么剩下的这个可以推导出来
if m==25:
x = all - set(a) # 利用集合的性质进行推导
y = all - set(b)
x = ''.join(x) # 字典转成字符串
y = ''.join(y)
d[y] = x # 将推导出来的这个键值对添加进字典
for i in range(len(c)):
if c[i] not in l and m!=25:
print("@")
break
else:
res += d[c[i]]
else:
print(res)