2024D-密码解密
2024D-密码解密
[P2820] 2024D-密码解密
本题练习地址:https://www.algomooc.com/problem/P2820
# 该函数根据ascii码值返回对应的字符
def func(ascii_code : int) -> str:
return chr(ord('a') + ascii_code - 1)
# 获取输入
s = input()
# 构建栈
stack = []
# 初始化结果变量
ans = ""
for i in range(len(s)):
# 创建局部变量tmp,用于保存当前阶段的结果
tmp = ""
# 如果遇到的不是'*',则将其加入栈
if s[i] != '*':
stack.append(s[i])
# 如果遇到的是'*',则执行两次弹出栈顶元素的操作
# 目的是对"j-z" 的密码"10*-26*"进行解密
else:
second = stack.pop()
frist = stack.pop()
tmp = func(int(frist + second)) + tmp
# "j-z" 的密码解密完后,继续对栈空间剩余的"a-i"元素进行解密
while stack:
tmp = func(int(stack.pop())) + tmp
ans += tmp
# 当遍历完s后,stack可能还留有元素,
# 因此要对stack的元素在进行遍历解密
tmp = ''
while stack:
tmp = func(int(stack.pop())) + tmp
ans += tmp
print(ans)