题解 | #字符串解码#

字符串解码

http://www.nowcoder.com/practice/4e008fd863bb4681b54fb438bb859b92

利用两个栈记录嵌套的字符串和数字; 在遇到 "[" 时,将数字和当前字符串入栈 在遇到 "]" 时,将数字出栈与当前字符串相乘再加上字符串栈中的结果得到该层嵌套中的字符串,然后赋值给当前值

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param s string字符串 
# @return string字符串
#
class Solution:
    
    def decodeString(self , s: str) -> str:
        # write code here
        stack, digits, digit, cur = [], [], 0, ""
        for c in s:
            if "0" <= c <= "9":
                digit += 10 * digit + int(c)
            elif c == "[":
                digits.append(digit)
                digit = 0
                stack.append(cur)
                cur = ""
            elif c == "]":
                stack[-1] += cur * digits.pop()
                cur = stack.pop()
            else:
                cur += c
        return stack[-1] + cur if stack else cur
全部评论
详细思路: 创建一个栈 stack,和两个辅助栈 digits 和 cur。 遍历输入字符串 s 的每个字符 c。 如果 c 是数字字符,说明当前有数字,那么将当前数字乘以 10 并加上当前字符 c 的数字值,更新 digit 变量。 如果 c 是左括号 "[", 说明开始一个新的字符串,需要将当前字符串保存到栈 stack 中,并且清空 cur 变量用于保存下一个字符串。 同时需要将当前数字 digit 保存到辅助栈 digits 中,并将 digit 重置为 0。 如果 c 是右括号 "]", 说明当前字符串已经结束,需要将 cur 字符串重复 digits[-1] 次,并与栈顶的字符串 stack[-1] 进行拼接,然后将 cur 更新为栈顶字符串,并弹出 digits 和 stack 的栈顶元素。 如果 c 是字母字符,说明当前在构建一个字符串,那么将当前字符拼接到 cur 变量后面。 最后返回栈 stack 的栈顶元素和 cur 的拼接结果,如果 stack 为空,则直接返回 cur。
1 回复 分享
发布于 2023-03-05 22:45 香港

相关推荐

不愿透露姓名的神秘牛友
07-10 15:58
投个小米提前批试试水,先投一个岗位看看形势,不行就再沉淀一下投第二个岗位,莫辜负
Java抽象带篮子:我嘞个骚刚,已经开始研发6g了吗
投递小米集团等公司7个岗位
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
06-14 19:09
门头沟学院 Java
darius_:给制造业搞的,什么物料管理生产管理,设备管理点检,最最关键的就是一堆报表看板。个人觉得没啥技术含量都是些基本的crud,但是业务很繁琐那种
点赞 评论 收藏
分享
评论
4
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务