我是靠谱客的博主 端庄世界,最近开发中收集的这篇文章主要介绍解压报文(python),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

解压报文 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
为了提升数据传输的效率,会对传输的报文进行压缩处理。输入一个压缩后的报文,请返回它解压后的原始报文。
压缩规则:n[str],表示方括号内部的 str 正好重复 n 次。注意 n 为正整数(0 < n <= 100),str只包含小写英文字母,不考虑异常情况。
" “输入描述:
输入压缩后的报文:
1)不考虑无效的输入,报文没有额外的空格,方括号总是符合格式要求的;
2)原始报文不包含数字,所有的数字只表示重复的次数 n ,例如不会出现像 5b 或 3[8] 的输入;
输出描述:
解压后的原始报文
注:
1)原始报文长度不会超过1000,不考虑异常的情况
示例1
输入
3[k]2[mn]
输出
kkkmnmn
说明
k 重复3次,mn 重复2次,最终得到 kkkmnmn
示例2
输入
3[m2[c]]
输出
mccmccmcc
说明
m2[c] 解压缩后为 mcc,重复三次为 mccmccmcc”

  • 利用栈的特性。
    代码如下:
    (方法一,无法覆盖2[3[k]10[mn]],[m2[c2[oi2[jihyb]]]])
def decompression():
	string = input().strip()
	i,stack,total = 0, [], ""
	while i < len(string):
		if string[i] == "]":
			tmp = ""
			while stack:
				value = stack.pop()
				if value.isalpha():
					tmp += value
				# elif value.isdecimal(): 其实这个也行,判断是不是小数,只是不严谨。
				elif value.isdigit():
					tmp = int(value) * tmp[:: -1]
			else:
				total += tmp
		stack.append(string[i])
		i += 1
	return total
			

方法二

def decompression(s):
    stack = []
    length = len(s)
    index = length - 1
    while index >= 0:
        if not s[index].isdigit():  # 非数字入栈
            stack.append(s[index])
            index -= 1
        else:  # 遇到数字时,解压
            num = ""
            res = ""
            while index >= 0 and s[index].isdigit():
                num = s[index] + num
                index -= 1
            # 说明此时的index处的字符一定时非数字的,此时栈顶一定是左括号
            while stack[-1] != "]":  # 获取栈中的字母
                tmp = stack.pop()
                if tmp != "[":  # 只要字母
                    res += tmp
            # 弹出栈顶的元素 # 右括号
            stack.pop()
            # 解压
            res = int(num) * res
            stack.append(res)
    stack.reverse()  # 反转字符串
    print("".join([item for item in stack if item not in "[]"]))


# s = "[m2[c2[oi2[jihyb]]]]"
s = "3[m2[c]]"
decompression(s)

最后

以上就是端庄世界为你收集整理的解压报文(python)的全部内容,希望文章能够帮你解决解压报文(python)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部