1. 程式人生 > 實用技巧 >LeetCode 394. 字串解碼

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;
    }
};