LeetCode刷题笔记-394.字符串解码
示例1:
输入:s = “2[abc]3[cd]ef”
输出:“abcabccdcdcdef”
示例2:
输入:s = “3[a2[c]]”
输出:“accaccacc”
此题为递归的括号匹配问题,可以用递归和分治法解决。
递归的编码顺序建议是:由里往外看,找到最简模块,然后找到第一个与其相同的模块(重复模块),从重复模块开始由外往内开始编程。例如示例2,最简模块为[c],重复模块为[a2[c]]。则我们从重复模块外面开始编程。
链接: https://leetcode-cn.com/problems/decode-string/.
class Solution {
public:
string analysis(string s, int& index) {
string res;
int num = 0;
string temp;
while (index < s.size()) {
if (s[index] >= '0' && s[index] <= '9') {
num = 10 * num + s[index] - '0';//加法逻辑
}
else if (s[index] == '[') {
temp = analysis(s, ++index);//碰到'[',开始递归
while(num-->0) res += temp;
num = 0;//num清零
}
else if (s[index] == ']') break;//碰到']',结束递归
else res += s[index]; //碰到字母,直接添加
index++;
}
return res;
}
string decodeString(string s) {
int index = 0;
return analysis(s, index);
}
};
作者:aVpHN4VwUo
链接: https://leetcode-cn.com/problems/decode-string/solution/c-di-gui-fen-zhi-shuang-bai-by-avphn4vwuo/.