例如"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