注意:
1.3[a]2[bc] 3[a2[c]] 这两个测试用例不好平衡,如果不是按string弹入栈而是用char的话,这两个用例就会很乱
2.当前面的数字超过10的时候,需要times = 10*times + s[i] - '0';
先乘以10一下
class Solution {
public:
string decodeString(string s) {
stack<int> num;
stack<string> str;
int times = 0;
string cur = "";
for(int i = 0 ; i < s.size(); ++ i){
if(s[i] >= '0' && s[i] <= '9')
times = 10*times + s[i] - '0'; //遇到10以上的数字
else if(s[i] == '['){
num.push(times);
str.push(cur); //不用char 按字符弹入
times = 0;
cur.clear();
}else if( (s[i] >= 'a' && s[i] <= 'z')
|| (s[i] >= 'A' && s[i] <= 'Z') ) cur += s[i];
else if(s[i] == ']'){
int k = num.top(); num.pop();
for(int j = 0 ; j < k ; ++ j)
str.top() += cur;
cur = str.top();
str.pop();
}
}
return cur;
}
};