分享一个容易理解的解法,个人觉得官方的不太好理解
代码实现
class Solution {
public String decodeString(String s) {
Stack<Integer> numStack = new Stack<>();
Stack<String> strStack = new Stack<>();
String str = "";
int numTemp = 0;
//分为四种情况考虑,分别是数字、字符,左括号以及右括号
for(char c : s.toCharArray())
{
if (Character.isDigit(c))
{
//这一步是为了处理左括号前面出现多位数
numTemp = numTemp * 10 + Integer.parseInt(c + "");
}
else if (c == '[')
{
numStack.push(numTemp);
strStack.push(str);
//此处一定要注意记得把numTemp和str置空
numTemp = 0;
str = "";
}
else if (c == ']')
{
//如果使用23[a2[c]]举例子,那么第一次pop出的number是2,第一次pop出的str1是a,str此时是c,这里一定要注意
int number = numStack.pop();
String str1 = strStack.pop();
while(number > 0)
{
str1 += str;
number--;
}
str = str1;
}
//其余的情况都是字符
else
{
str += c;
}
}
return str;
}
}