LeetCode 394. 字符串解码

leetcode acwing

递归

没什么好说的,看代码吧

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;
    }
};
posted @ 2021-01-07 13:27  alexemey  阅读(33)  评论(0)    收藏  举报