394. Decode String
s = "3[a]2[bc]", return "aaabcbc".
s = "3[a2[c]]", return "accaccacc".
s = "2[abc]3[cd]ef", return "abcabccdcdcdef".Last updated
s = "3[a]2[bc]", return "aaabcbc".
s = "3[a2[c]]", return "accaccacc".
s = "2[abc]3[cd]ef", return "abcabccdcdcdef".Last updated
class Solution {
public String decodeString(String s) {
Stack<Integer> counters = new Stack<>();
Stack<StringBuilder> strings = new Stack<>();
StringBuilder res = new StringBuilder();
int num = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isDigit(c)) {
if (num == 0) strings.push(res); //把之前的结果先存入string stack
num = 10 * num + c - '0';
} else if (c == '[') {
counters.push(num); //把【之前的数字存入数字stack
num = 0; //重置num
res = new StringBuilder();
} else if (Character.isLetter(c)) {
res.append(c);
} else if (c == ']') {
StringBuilder top = strings.pop(); //top是之前存入在string stack里的char
int n = counters.pop(); //n是此【】里需要循环的次数
while (n-- != 0) top.append(res); //res是此【】里的char
res = top;
}
}
return res.toString();
}
}