394. 字符串解码
Q:

递归:
class Solution {
public:
string decodeString(string s) {
if (s.empty()){
return "";
}
string res="",str;
int i=0,siz=s.size();
int repeat=0,temp=0;
while(i<siz){
if (s[i]<='9' and s[i]>='0'){
temp=temp*10+(s[i]-'0');
}
else if (s[i]=='['){
int left_bracket=1,j=i+1;
while(left_bracket){
if(s[j]==']'){
left_bracket--;
}
else if(s[j]=='['){
left_bracket++;
}
++j;
}
str=decodeString(s.substr(i+1,j-2-i));
for(int i=0;i<temp;++i){
res+=str;
}
temp=0;
i=j-1;
}
else{
res+=s[i];
}
++i;
}
// cout<<res<<endl;
return res;
}
};
迭代:
class Solution {
public:
string decodeString(string s) {
stack<string> sta1;
stack<int> sta2;
string res="",str;
int i=0,siz=s.size(),num=0;
while(i<siz){
if(s[i]=='['){
sta1.push(res);
sta2.push(num);
num=0;
res="";
}
else if(s[i]==']'){
str=res;
res=sta1.top();
sta1.pop();
for(int j=0;j<sta2.top();++j){
res+=str;
}
sta2.pop();
}
else if(isdigit(s[i])){
num=num*10+(s[i]-'0');
}
else{//isalpha
res+=s[i];
}
++i;
}
return res;
}
};
进击的小🐴农

浙公网安备 33010602011771号