
解题方法:

参考代码:
- class Solution{
- public:
- string decodeString(string s)
- {
- stack
sst; - stack<int> dst;
- //防止字符串栈为空的时候再追加字符串到栈顶元素
- sst.push("");
- int n = s.size();
- int i = 0;
- while(i
//最好不要用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();
- }
- };