模拟:字符串的处理问题:小红书正序处理 + 腾讯的栈弹出问题

第一题:薯队长写了一篇笔记草稿,请你帮忙输出最后内容。

1.输入字符包括,"(",")""<"和其他字符。 
2.其他字符表示笔记内容。
3.()之间表示注释内容,任何字符都无效。括号保证成对出现。
4."<"表示退格,删去前面一个笔记内容字符。括号不受"<"影响。

思路:利用栈的思路:遍历一次,模拟遇到的各类情况。

s = raw_input().strip()
 
res,brackets = [],0
 
for c in s:
    if c=='(':
        brackets += 1
    elif c==')':
        brackets -= 1
    elif brackets==0:
        if c=='<':
            res.pop()
        else:
            res.append(c)
print "".join(res)

第二题:字符串的压缩问题:

输入描述:
输入第一行包含一个字符串s,代表压缩后的字符串。
S的长度<=1000;
S仅包含大写字母、[]|;
解压后的字符串长度不超过100000;
压缩递归层数不超过10层;
输出描述:
输出一个字符串,代表解压后的字符串。
输入例子1:
HG[3|B[2|CA]]F
输出例子1:
HGBCACABCACABCACAF

解析+代码

import sys
while True:
    line = sys.stdin.readline().strip()
    #当没有内容时,退出
    if line == "":
        break
    #开始遍历入栈
    stack = []
    for s in line:
        #在没有遇到右括号的时候,一值入栈,遇到右括号开始对【】内的信息解压缩
        if s != "]":
            stack.append(s)
        else:
            #创建两个变量 temp:存放字符 和times :存放数字:
            temp = ''
            #在弹出的时候,遇到|之前的信息都是需要复制的字符串
            while stack and stack[-1]!= "|":
                temp = stack.pop() + temp
            #弹出:|
            stack.pop()
            
            times = ""    #注意这里面的数可能是两位以上的
            while stack and stack[-1].isdigit():
                times = stack.pop() + times
            #弹出 ”【“
            stack.pop()
            stack.append(int(times)*temp)
    print("".join(stack))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值