LeetCode 394. 字符串解码
递归
没什么好说的,看代码吧
class Solution {
public:
// 递归
string decodeString(string s) {
string res;
for (int i = 0; i < s.size();)
{
// 前面的字母直接加入结构
if (!isdigit(s[i])) res += s[i ++];
else
{
// 解析重复次数
int j = i;
while(isdigit(s[j])) j ++;
int cnt = atoi(s.substr(i, j - i).c_str());
// 解析括号内子串,使用sum表示待匹配的左括号个数
int k = j + 1, sum = 1;
while(sum > 0)
{
if (s[k] == '[') sum ++;
if (s[k] == ']') sum --;
k ++;
}
// 递归子问题,获取最大括号内部的解析结果
string temp = decodeString(s.substr(j + 1, k - j - 2));
// 按次数添加至res
while(cnt --) res += temp;
// 移至右括号右边的字符, k在第二个while循环中最终是指向最大括号右括号的右边一格
i = k;
}
}
return res;
}
};

浙公网安备 33010602011771号