🔗 https://leetcode.cn/problems/decode-string
题目
- 对字符串中的 k[s] 解码为 s 重复 k 次
思路
- 碰到数字,开始进行递归 decode 展开,否则字符不解码
- 针对于解码的部分,先明确 k 的数字是多少,再明确 [ ] 括号中的 str 是什么,最后重复 k 次
- 注意这个过程中,要是碰到字符串是数字开头,递归进行 decode
代码
cpp
class Solution {
public:
string decode(string s, int start, int& ori_len) {
int index = start;
int num = 0;
while (s[index] != '[') {
num = num* 10 + s[index] - '0';
index++;
}
string str;
for (int i = index + 1; i < s.size(); i++) {
if (s[i] == ']') {
ori_len = i - start;
break;
}
if (s[i] >= '0' && s[i] <= '9') {
int len = 0;
str += decode(s, i, len);
i += len;
} else {
str += s[i];
}
}
string ans;
while (num--) {
ans += str;
}
return ans;
}
string decodeString(string s) {
string ans;
for (int i = 0; i < s.size(); i++) {
if (s[i] >= '0' && s[i] <= '9') {
int ori_len = 0;
ans += decode(s, i, ori_len);
i += ori_len;
} else {
ans += s[i];
}
}
return ans;
}
};