题目链接:394. 字符串解码 - 力扣(LeetCode)
遇到数字就计算重复的次数,遇到左括号就开始计算重复的字符串,将重复的次数和字符串起始位置压入栈,遇到右括号说明到了要重复字符串的末尾,根据栈中的重复次数和字符串的起始位置进行重复
class Solution {
public:
string decodeString(string s) {
stack<pair<int, int>> szu;
string ans;
int num = 0;
for (auto &it: s) {
if (isdigit(it))
num = num * 10 + it - '0'; // 计算重复次数
else if (it == '[') {
szu.emplace(ans.size(), num); // 存储要重复的字符串的起始位置和重复次数
num = 0;
} else if (it == ']') {
string repeat = ans.substr(szu.top().first, ans.size() - szu.top().first); // 计算重复字符串
for (int i = 0; i < szu.top().second - 1; i++)
ans += repeat;
szu.pop();
} else
ans += it; // 存储重复字符串
}
return ans;
}
};