1. 题目描述
2. 解题思路
-
使用一个
pair<string, int>
类型的栈stk
用以保存当前字符及出现次数; -
依次判断每个字符
ch
:- 若为
‘[’
,则将(res, num)
压入栈中,其中res
表示当前字符,num
表示出现次数; - 若为
‘]’
,则从栈顶取出(cur_str, cur_num)
,并与res
进行拼接,得到新的res
; - 若为数字
0-9
,则修改num = num * 10 +(ch - ‘0’)
; - 若为字母,则修改
res += ch
;
- 若为
-
判断完成后返回最终的
res
。
3. 代码实现
class Solution {
public:
string decodeString(string s) {
// 表示当前字符以及其出现次数
stack<pair<string, int>> stk;
int num = 0;
string res = "";
for (auto& ch : s) {
if (ch == '[') {
stk.emplace(res, num);
num = 0;
res = "";
} else if (ch == ']') {
auto[cur_str, cur_num] = stk.top();
stk.pop();
while (cur_num--)
cur_str += res;
res = cur_str;
} else if (ch >= '0' && ch <= '9') {
num = num * 10 + (ch - '0');
} else {
res += ch;
}
}
return res;
}
};