深信服公司的算法笔试题
1 题目
在URL字符串中,如果百分号%后面跟了两个十六进制数字,那么它表示相应ASCII值所对应的字符,如%2F表示’/‘,%32表示’2’。%编码还可以进行嵌套,如%%32F可以解码成%2F,再进一步解码成/。如果没有任何百分号后面跟的是两个十六进制数字则无法再进行解码。
现在有一系列的URL,小强希望你帮忙进行百分号解码,直到无法再解码为止。
输入描述:
第一行一个正整数T(T<=10),表示T个测试样例;
对于每个测试样例,
输入字符串s,字符串不包含空白符且长度小于100,000。
有部分测试样例的字符串长度<=1,000。
输出描述:
输出T行,每行一个字符串,表示解码后的结果。
示例1
输入
1
%%32F
输出
/
2 解析
用栈的思想,依次进栈,遇到%后,将之前进栈的全部转换为字符,再继续进栈
3 Python实现
n = int(input())
def decode(st):
v1 = st.pop()
v2 = st.pop()
ch = chr(int(v1+v2,16))
if ch=='%':
st = decode(st)
else:
st.append(ch)
return st
for i in range(n):
ss = str(input())
stack = []
for s in ss[::-1]:
if s !='%':
stack.append(s)
else:
stack = decode(stack)
print(''.join(stack[::-1]))