在URL字符串中,如果百分号%后面跟了两个十六进制数字,那么它表示相应ASCII值所对应的字符%32表示‘2‘。%编码还可以进行嵌套,如%%32F可以解码成%2F,再进一步解码成

本文介绍了一种处理URL字符串中百分号编码的算法,通过使用栈和递归方法实现连续解码,直到无法再解码为止。文章详细解释了解码过程,并提供了具体的输入输出示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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个 或者 最后三个 %数字数字这种能够解析的格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值