字符串解码-LeetCode

本文详细解析了LeetCode上第394题“字符串解码”的算法实现,通过递归和分治法解决括号匹配问题,提供了一种清晰的编码思路和完整的C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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/.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值