题解:
class Solution {
public:
string decodeString(string s) {
string res = "";
stack<string> strs;
stack<int> nums;
int num = 0;
int n = s.size();
for (int i = 0; i < n; i++) {
if (s[i] >= '0' && s[i] <= '9') {
num = num * 10 + s[i] - '0';
} else if ((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z')) {
res = res + s[i];
} else if (s[i] == '[') {
// 遇见[,则将前面的str加入strs中。并将数字加入nums里面
nums.push(num);
num = 0;
strs.push(res);
res = "";
} else {
// 遇见],则开始累加str。此时的str为从[开始,到]的字符串
int times = nums.top();
nums.pop();
for (int j = 0; j < times; j++) {
strs.top() += res;
}
res = strs.top(); // 更新res
strs.pop();
}
}
return res;
}
};