在URL字符串中,如果百分号%后面跟了两个十六进制数字,那么它表示相应ASCII值所对应的字符,如%2F表示’/’,%32表示’2’。%编码还可以进行嵌套,如%%32F可以解码成%2F,再进一步解码成/。如果没有任何百分号后面跟的是两个十六进制数字则无法再进行解码。
现在有一系列的URL,小强希望你帮忙进行百分号解码,直到无法再解码为止。
输入描述:
第一行一个正整数T(T<=10),表示T个测试样例;
对于每个测试样例,
输入字符串s,字符串不包含空白符且长度小于100,000。
有部分测试样例的字符串长度<=1,000。
输出描述:
输出T行,每行一个字符串,表示解码后的结果。
输入例子1:
1 %%32F
输出例子1:
/
def solution(strList):
stack = []
for ch in strList:
stack.append(ch)
decode(stack)
return "".join(stack)
def decode(strList):
if len(strList) > 2:
if (strList[-1] != '%') and (strList[-2] != '%') and (strList[-3] == '%'):
temp = chr(int(strList[-2] + strList[-1], 16))
strList.pop()
strList.pop()
strList.pop()
strList.append(temp)
return decode(strList)
return strList
lineNumber =input()
for i in range(int(lineNumber)):
inputStr = input()
print(solution(inputStr))
1.后面的%先解析掉,类似后进先出,和栈的特性类似
2.解析结束后生成的新字符串可能还要继续解析,而继续解析的方法和前面的方法是一样的,这个就想到了递归
3.递归的停止条件是:如果stack里的数小于等于2个 或者 最后三个 %数字数字这种能够解析的格式