对于字符串中既存在连续数字又存在连续字母的字符串,如何提取连续数字,Leetcode394.字符串解码

例如"2345abc",如何输出2345?
抑或是输入"23a4b5c",如何输出2345?

s = input()
num = 0
for c in s:
	# 判断是否是数字
	if c.isdigit():
		# 通过此操作位数不断上升
		# num = 2
		# num = 2*10+3
		# num = 23*10+4
		# num = 234*10+5
		num = num*10+int(c)
print(num)

Leetcode394.字符串解码
在这里插入图片描述在这里插入图片描述
本题核心思路是在栈里面每次存储两个信息(左括号前的字符串,左括号前的数字),比如abc3[def],当遇到第一个左括号时,压入栈的是(“abc”,3),然后遍历括号里面的字符串def,当遇到右括号的时候,从栈里面弹出一个元素(s1,n1),得到新的字符串为s1+n1*“def”,也就是abcdefdefdef。对于括号里面嵌套的情况也是同样的处理方法

凡是遇到左括号就进行压栈处理,遇到右括号就弹出栈,栈中记录的元素很重要

def decodeString(s):
	stack = []
	num = 0
	res = ""
	for c in s:
		# 如果此时是数字的话,记录下数字
		if c.isdigit():
			num = num*10+int(c)
		# 如果此时遇到"[",将(左括号前的字符串,左括号前的数字)压入栈中
		elif c=="[":
			stack.append((res,num))
			# res,num清零
			res,num = "",0
		elif c=="]":
			# 提取栈顶元素
			top = stack.pop()
			# 计算此时的值
			# top[0]是前面的字符串,top[1]是前面的数字,即重复的次数
			res = top[0]+res*top[1]
		else:
			res+=c #提取括号中的内容
	return res		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值