1201-字符串编码

最小栈 leetcode 394.

题目大意:[]前的数字为出现的次数,中的内容会要重复的数据,例如
输入:
s = “3[a2[c]]”
输出:
“accaccacc”
解题思路:主要难点为 嵌套中括号,利用栈的特点设计两个LinkedList存储次数和重复值,每次遇到左括号的时候将当前的数字和重复值分别入栈,遇到右括号的时候将数字栈的最后一个值取出来为重复次数for,重复内容则是当前重复值而非重复值栈中的值,重复值栈中存储的是更外一层中括号的重复值,它需要用来拼接当前计算重复值以便循环使用
题解及注释:

class Solution {
    public String decodeString(String s) {
        StringBuilder res = new StringBuilder();
        int multi = 0;
        LinkedList<Integer> multiS = new LinkedList<>();
        LinkedList<String> resS = new LinkedList<>();

        for (Character c : s.toCharArray()) {
            if ('[' == c) {
                multiS.addLast(multi);
                resS.addLast(res.toString());
                multi = 0;
                res = new StringBuilder();
            }
            else if (']' == c) {
                StringBuilder tmp = new StringBuilder();
                int tmpMulti = multiS.removeLast();
                for (int i = 0; i < tmpMulti; i++) {
                    tmp.append(res);
                }
                res = new StringBuilder(resS.removeLast() + tmp);
            }
            else if (c >= '0' && c <= '9') multi = multi*10 + Integer.parseInt(c+"");
            else res.append(c);
        }
        return res.toString();
        
    }
}

总结:对于左右括号情况判断处理确实还是不明白,只能说理解了要是没有具体题解可看根本是想不出来的

请登录后发表评论

    没有回复内容