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

    技术2023-08-01  114

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

    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))
    Processed: 0.009, SQL: 9