leetcode 字串解碼 中等
阿新 • • 發佈:2021-08-20
用棧來儲存字元,每一次遇到 ']' 時,就彈棧到棧頂為 '[' 為止,這樣就得到了中括號內的字元,然後繼續彈,得到次數即可。
最後按照次數與字串在入棧
class Solution { public: string decodeString(const string &s) { stack<char> stk; for (int i = 0; i < s.size(); ++i) { if (s[i] != ']') { stk.push(s[i]);continue; } string temp; while (!stk.empty() && stk.top() != '[') { temp.push_back(stk.top()); stk.pop(); } stk.pop(); int cnt = 0, base = 1; while (!stk.empty() && stk.top() != '[' && stk.top() >= '0' && stk.top() <= '9') { cnt = (stk.top() - '0') * base + cnt; base *= 10; stk.pop(); } if (temp.empty()) continue; for (int j = 0; j < cnt; ++j) { for (int k = temp.size() - 1; k >= 0; --k) { stk.push(temp[k]); } } } string ret; while (!stk.empty()) { ret.push_back(stk.top()); stk.pop(); } reverse(ret.begin(), ret.end()); return ret; } };