思路:和逆波兰式相似,首先开两个栈,一个保存数字,一个保存字符,当遇到[的时候,首先将数字入栈,再将数字前边的字符入栈,然后在利用一个字符串保存[ ]中的字符,直到遇到 ] 首先是对[ ] 进行翻倍,然后再和字符栈的栈顶元素叠加倍数次....
code:
class Solution { public: string decodeString(string s) { int n=s.size(); stack<int >stm; stack<string >st; int tmp=0; string cur=""; for(int i=0;i<s.size();i++){ if(s[i]>='0'&&s[i]<='9'){ tmp=tmp*10+s[i]-'0'; } else if(s[i]==']'){ int k=stm.top(); stm.pop(); for(int j=0;j<k;j++) st.top()+=cur; cur=st.top(); st.pop(); } else if(s[i]=='[') { stm.push(tmp); st.push(cur); tmp=0; cur=""; } else cur+=s[i]; } return cur; } };