Leetcode_394_ Decode String_dfs搜尋_我的演算法之路_解密字串
阿新 • • 發佈:2018-11-10
在這個題目中,在給定3[a]2[bc]這種形式的字串,我們需要來解密這個字串,即用遞迴的思想來做下面是我的程式碼
class Solution { public: string decodeString(string s) { string res; for(int i=0;i<s.size();)//首先對字串的每一個字元進行列舉 { if(!isdigit(s[i])) res+=s[i++];//用到isdigit函式來判斷該字元是不是1-9的數字,如果不是將字元加到答案中,這其中有一個陷阱,就是滿足if語句之後,執行關係式res+=[i++]用完i才能進行++的自加運算,進入到else語句則不行。 else { int k=0; while(isdigit(s[i])) k=k*10+s[i++]-'0';//此語句常用來計算字串中數字字元的大小,減去‘0’是因為ascii碼將字元數字轉換成數字字元。 int j=i+1,sum=1;//這其中涉及到了括號序列的問題,設定一個暫存器,當遇到左括號為加1遇到右括號為減一,當sum值為0是,開始的左括號與為0的右括號匹配。 while(sum>0) { if(s[j]=='[') sum++; if(s[j]==']') sum--; j++; }//此時j移動到了與開始左括號所匹配的右括號的下一位。 string r=decodeString(s.substr(i+1,j-i-2));//如果內部巢狀一個k規則,則遞迴到下一層來進行運算,即下一層的字串長度為j-i-2,從i+1位開始,在次用到了substr函式。 while(k--) res+=r;//然後就用k*所遞迴出來的字串。注意語句在哪個括號內 i=j; } } return res;//for迴圈執行完畢,然後返回結果。 } };
加油加油!!!