⏰ 时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)
class Solution {
public String decodeString(String s)
{
StringBuilder res = new StringBuilder();
int k = 0;// 记录当前的重复 次数
Stack stackMul = new Stack<>();// 重复次数 栈
Stack stackRes = new Stack<>();// 每个 k[str]内的 str 栈
for (char c : s.toCharArray())
{
if (c == '[')
{
// 碰到左括号,记录 K 和 当前res,归零
stackMul.add(k);
stackRes.add(res.toString());
k = 0;
res = new StringBuilder();
}
else if (c == ']')
{
// 处理前边最近的一个 k[str]
StringBuilder str = new StringBuilder();
int kk = stackMul.pop();
for (int i = 0; i < kk; i++)
str.append(res);
// 之前的字符串 栈顶元素,再拼接上 当前的 str
res = new StringBuilder(stackRes.pop() + str);
} else if (c >= '0' && c <= '9')// 数字,还得考虑 k 是多位数的情况
k = k * 10 + Integer.parseInt(c + "");
else// 是普通字符
res.append(c);
}
return res.toString();
}
}