LeetCode 394. 字串解碼
阿新 • • 發佈:2021-01-07
遞迴
沒什麼好說的,看程式碼吧
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; } };