这种题就是很经典的括号处理问题,用两个stack完成。 不过就是很多细节需要考虑,提交了超过5次才AC,浪费了很多时间,以后写这种问题的时候,一定要实现打草稿,不要马上上手写,很容易错一堆的。
class Solution {public: string decodeString(string s) { if(s.size()==0) return s; stack<string> num; stack<char> kuohao; int i=0; while(i<s.size()) { if(s[i]=='[') { kuohao.push(s[i]); i++; } else if(s[i]==']') { if(kuohao.top()=='[') { kuohao.pop(); string number=num.top(); num.pop(); int time=atoi(num.top().c_str()); num.pop(); string result; for(int i=0;i<time;i++) result+=number; num.push(result); } i++; } else if(s[i]>='0'&&s[i]<='9') { string number; for(int j=i;i<s.size();j++) { if(s[j]>='0'&&s[j]<='9') number+=s[j]; else { i=j; break; } } num.push(number); } else { string str; for(int j=i;i<s.size();j++) { if(s[j]>='a'&&s[j]<='z') str+=s[j]; else { i=j; break; } } num.push(str); } while(num.size()>=2) { string first=num.top(); num.pop(); string second=num.top(); num.pop(); if((first[0]<'0'||first[0]>'9')&&(second[0]<'0'||second[0]>'9')) num.push(second+first); else { num.push(second); num.push(first); break; } } } return num.top(); }};新闻热点
疑难解答