#2 3 5 7 8 10 的点全WA了,代码如下
#include <bits/stdc++.h>
using namespace std;
string init;
int len,t,ct,ri,tail;
void f(string &s,int i){
if(i==len) return ;//用完走人
if(s[i]=='['){//找到需要压缩的信息
string cath,res;ct=s[i+1]-'0';
//记录压缩的信息 cath
for(int p=i+2;true;p++){
if(s[p]=='[') f(s,p);
else if(s[p]==']'){tail=p;break;}
cath+=s[p];
}
//1. 删除之前的
s.erase(i,tail-i+1);
//2. 解压信息
for(int j=1;j<=ct;j++) res+=cath;
//3. 插入解压后缩后的信息
s.insert(i,res);
return ;
}
//如果不用压缩,递归回去
f(s,i+1);
}
int main()
{
// freopen("input.in","r",stdin);
// freopen("output.out","w",stdout);
cin>>init;
len=init.size();
f(init,0);
cout<<init;
return 0;
}
思路用的是递归拆解,先找出需要拆解的字符串然后在用cath保存压缩的字符串,删除后,再循环插入回去
有大佬能帮一下吗?