牛客21805 字符串编码与解码

链接: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)

猜你喜欢

转载自blog.csdn.net/tsundere_x/article/details/112967954
今日推荐