最小栈 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();
}
}
总结:对于左右括号情况判断处理确实还是不明白,只能说理解了要是没有具体题解可看根本是想不出来的
标签:tmp,编码,LinkedList,重复,StringBuilder,1201,res,字符串,new From: https://www.cnblogs.com/hgao/p/18579819