leetcode 394. 字串解碼(棧)
阿新 • • 發佈:2020-12-06
題目連結
https://leetcode-cn.com/problems/decode-string/
題意:
給定一行字串,判斷經過k[encoded_string]編碼規則後的結果
思路:
把每一層的字串,以及出現的次數放在棧裡面
最後記錄拼接完成後的結果
難點在於怎麼同時記錄巢狀的關係,比如3[a2[bc]4[d]]
class Solution { public: //注意區域性的tmp 更新與全域性tmp更新的關係 //不直觀,不好想 //每次把之前處理好的放在棧裡 string decodeString(string s) { stack<string> S; stack<int> S2; int num=0; string tmp=""; string ans=""; for(int i=0;i<s.size();i++){ char cur=s[i]; if(isdigit(cur)){//數字 num=num*10+cur-'0'; } else if(isalpha(cur)){ tmp+=cur; } else if(cur=='['){ S2.push(num); num=0; S.push(tmp); tmp=""; } else{ //前面部分的字串 // string pre=""; // if(S2.size()>1){ // pre=S.top(); // S.pop(); // } int tmp_n=S2.top(); S2.pop(); // string tmp_s=""; string tp=S.top(); S.pop(); for(int i=1;i<=tmp_n;i++){ // tmp_s+=tmp; tp+=tmp;//不好想 3[a2[cc]] } tmp=tp;//不好想 // pre+=tmp_s; // cout<<pre<<"\n"; // S.push(pre); // if(!S2.size()) ans+=pre; } } ans=tmp; return ans; } };