题意:
思路:使用两个栈来模拟,一个栈存数字,另一个栈存字符串,然后分情况讨论:
1. 当遇到数字,那么累加。
2. 当遇到的是字符,那么加到当前字符串上
3. 如果遇到的是 '[',那么截断字符串,把当前字符串和数字分别入栈
4. 如果遇到的是 ']',那么弹出数字栈中的数字然后加到栈顶的字符串
class Solution {
public:
string decodeString(string s) {
int n = s.size();
stack<int> nums; //存数字
stack<string> str; //存字符串
int num = 0;
//当前字符串
string cur = "";
for(int i = 0; i < n; i++){
if(s[i] >='0' && s[i] <= '9'){
num = num * 10 + s[i]-'0';
}else if(s[i] == '['){
nums.push(num);
str.push(cur);
cur = "";
num = 0;
}else if(s[i] == ']'){
int t = nums.top();
nums.pop();
for(int j = 0; j < t; j++){
str.top() += cur;
}
//计算完毕之后弹出,作为当前字符串
cur = str.top();
str.pop();
}else if(s[i] >='a' && s[i]<='z'){
cur +=s[i];
}
}
return cur;
}
};