方法一:辅助栈法
class Solution
{
public:
string decodeString(string s)
{
string ret; //利用string模拟栈
for (auto ch : s)
{
if (ch == ']')
{
string temp; //因为一对[]中的字符不止一个,所以用一个string暂存一下
int n = 0;
while (ret.back() != '[')
{
temp.push_back(ret.back());
ret.pop_back();
}
ret.pop_back(); //这里pop的是'['
for (int i = 1;
ret.empty() == false && ret.back() >= '0' && ret.back() <= '9';
i *= 10) //因为我们是对单个字符进行处理,所以诸如12算两个字符,要自己去转换
{
n += i * (ret.back() - '0'); //直接减'0'就可以直接将char转换为相应的int型数字
ret.pop_back();
}
while (n > 0)
{
for (auto itr = temp.rbegin(); itr != temp.rend(); itr++) //因为栈后进先出的特点,所以要逆着来
{
ret.push_back(*itr);
}
n--;
}
}
else //如果不是']',我们就压栈
{
ret.push_back(ch);
}
}
return ret;
}
};