【栈】LeetCode 394. 字符串解码

题目链接

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();
    }
}
posted @ 2023-02-13 19:17  Frodo1124  阅读(26)  评论(0编辑  收藏  举报