class Solution {
public String decodeString(String s) {
//括号前的数量,用于做倍数计算
LinkedList<Integer> countStack=new LinkedList<>();
//字符串栈
LinkedList<String> strStack=new LinkedList<>();
StringBuilder sb=new StringBuilder();
int count=0;
//eg:输入:s = "3[a]2[bc]"
for (char c : s.toCharArray()) {
if (c>='0'&&c<='9'){
count=count*10+(c-'0');
}else if (c>='a'&&c<='z'){
sb.append(c);
}else if (c=='['){
countStack.push(count);
strStack.push(sb.toString());
sb=new StringBuilder();
count=0;
}else {
//c==]
StringBuilder currSb=new StringBuilder();
currSb.append(strStack.pop());
Integer currCount = countStack.pop();
for (int i = 0; i < currCount; i++) {
currSb.append(sb);
}
sb=currSb;
}
}
return sb.toString();
}
}