首页 > 其他分享 >【栈】LeetCode 394. 字符串解码

【栈】LeetCode 394. 字符串解码

时间:2023-02-13 19:22:05浏览次数:54  
标签:numStack temp StringBuilder 解码 result 394 字符串 new LeetCode

题目链接

394. 字符串解码

思路

建立一个数字栈 numStack 和一个字符串栈 stringBuilderStack。遍历字符串 s

  • 遇到数字和字符时按照相应规则分别累加进 kresult 中。
  • 遇到 [ 时将 kresult 的值压入栈中并清空变量。
  • 遇到 ] 时将两个栈的栈顶元素弹出进行计算得到字符串 temp,将 temp 接到下一个栈顶元素的后面再压入栈

代码

class Solution {
    public String decodeString(String s) {
        int k = 0;
        StringBuilder result = new StringBuilder();
        Stack<Integer> numStack = new Stack<>();
        Stack<StringBuilder> stringBuilderStack = new Stack<>();

        for(char c : s.toCharArray()){
            if(Character.isDigit(c)){
                k = k * 10 + c - '0';
            }else if(Character.isLetter(c)){
                result.append(c);
            }else if(c == '['){
                stringBuilderStack.push(result);
                numStack.push(k);
                k = 0;
                result = new StringBuilder();
            }else{
                int cnt = numStack.pop();
                StringBuilder temp = new StringBuilder();
                for(int j = 0; j < cnt; j++){
                    temp.append(result);
                }
                result = stringBuilderStack.pop().append(temp);
            }
        }

        return result.toString();
    }
}

标签:numStack,temp,StringBuilder,解码,result,394,字符串,new,LeetCode
From: https://www.cnblogs.com/shixuanliu/p/17117480.html

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:合并排序的数组
    题目:给定两个排序后的数组A和B,其中A的末端有足够的缓冲空间容纳B。编写一个方法,将B合并入A并排序。初始化 A和B的元素数量分别为 m和n。示例:输入:A=[1......
  • 【LeetCode字符串#06】KMP巩固练习:重复子串
    重复的子字符串力扣题目链接(opensnewwindow)给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。......
  • LeetCode-83. 删除排序链表中的重复元素(java)
    一、前言:......
  • leetcode144-二叉树的前序遍历
    leetcode144-二叉树的前序遍历​​1、问题描述​​​​2、递归解法​​1、问题描述  给你二叉树的根节点​​root​​,返回它节点值的前序遍历。  示例1:输入:root=[......
  • leetcode 1233. 删除子文件夹
    ​​1233.删除子文件夹​​难度中等142你是一位系统管理员,手里有一份文件夹列表 ​​folder​​,你的任务是要删除该列表中的所有 子文件夹,并以 任意顺序 返回剩下的......
  • LeetCode算法题二——合并两个有序链表
    题目给你一个非空整数数组nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问......
  • LeetCode刷题(一)——两数之和
    题目:给定一个整数数组nums 和一个整数目标值target,请你在该数组中找出和为目标值target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案......
  • #yyds干货盘点# LeetCode程序员面试金典:布尔运算
    题目:给定一个布尔表达式和一个期望的布尔结果result,布尔表达式由0(false)、1(true)、&(AND)、|(OR)和^(XOR)符号组成。实现一个函数,算出有几种可使该表达式得出......
  • LeetCode_单周赛_332
    6354.找出数组的串联值题意将数组首尾元素接在一起,就是串联值。串联之后删除,如果只剩下一个元素,加上这个元素即可双指针,从首和尾向中间移动即可code注意:用long没......
  • 【DFS】LeetCode 108. 将有序数组转换为二叉搜索树
    题目链接108.将有序数组转换为二叉搜索树思路类似于二分搜索,定位到数组中间mid,然后左边的子数组构成左子树,右边的子数组构成右子树,mid处的数字构成根结点。递归构建......