解题方法:
参考代码:
class Solution{
public:
string decodeString(string s)
{
stack<string> sst;
stack<int> dst;
//防止字符串栈为空的时候再追加字符串到栈顶元素
sst.push("");
int n = s.size();
int i = 0;
while(i<n)//最好不要用for循环,容易出问题
{
if (s[i] >= '0' && s[i] <= '9')
{
int tmp = 0;
while (i < n && s[i] >= '0' && s[i] <= '9')
{
tmp = tmp * 10 + (s[i] - '0');
i++;
}
dst.push(tmp);
}
else if (s[i] == '[')
{
//记得++从下一个位置开始找字母字符串,否则会死循环
i++;
string str;
while (i < n && s[i] >= 'a' && s[i] <= 'z')
{
str += s[i];
i++;
}
sst.push(str);
}
else if (s[i] == ']')
{
int k = dst.top();
dst.pop();
string tmp = sst.top();
sst.pop();
for (size_t j = 0; j < k; j++)
{
sst.top() += tmp;
}
//记得要++,否则会死循环
i++;
}
else if (s[i] >= 'a' && s[i] <= 'z')
{
while (i < n && s[i] >= 'a' && s[i] <= 'z')
{
sst.top() += s[i];
i++;
}
}
}
return sst.top();
}
};