非常典型的栈的应用。
class Solution {
public:
string decodeString(const string s) {
int s_len = s.length();
stack<string> s_p;
string tmp = "";
int repet = 0;
int num_digit = 0;
for(int i = s_len-1; i >= 0; i--)
{
if(s[i] == '[')
{
if(repet)
{
for(int j = 0; j < repet; j++)
{
s_p.push(tmp);
}
repet = 0;
num_digit = 0;
}
tmp = "";
while(!s_p.empty())
{
string top_c = s_p.top();
s_p.pop();
if(top_c == "]")
break;
tmp += top_c;
}
}
else if(s[i] >= '0' && s[i] <= '9')
{
repet += (pow(10,num_digit) * (s[i] - '0'));
num_digit++;
if(i == 0)
{
for(int j = 0; j < repet; j++)
{
s_p.push(tmp);
}
}
}
else
{
if(repet)
{
for(int j = 0; j < repet; j++)
{
s_p.push(tmp);
}
repet = 0;
num_digit = 0;
}
string tmp2 = "";
tmp2.push_back(s[i]);
s_p.push(tmp2);
}
}
tmp = "";
while(!s_p.empty())
{
tmp += s_p.top();
s_p.pop();
}
return tmp;
}
};