wwldx @ 2020-03-30 16:15:30
样例2,7,9,11,12,13都re 不知道为啥呀,求助
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,char> P;
#define maxn 200
stack<P> s;
int main()
{
string s1;
// char num[maxn];
int qwe=0,rty=0;
cin>>s1;
int zxc[maxn];//标记未配对的位置
int n=s1.size();
for(int i=0;i<n;i++)
{
if(s1[i]=='(' || s1[i]=='[')
s.push(make_pair(i,s1[i]));
// num[qwe++]=s1[i];
else
if(s1[i]==']')
{
P asd=s.top();
if(!s.empty() && asd.second=='[')
{
// num[qwe++]=']';
s.pop();
}
else
// s.push(make_pair(i,s1[i]));
zxc[rty++]=i;//标记未配对的位置
}
else
{
P asd=s.top();
if(!s.empty() && asd.second=='(')
{
// num[qwe++]=')';
s.pop();
}
else
// s.push(make_pair(i,s1[i]));
zxc[rty++]=i;
}
}
while(!s.empty())
{
P asd=s.top();
zxc[rty++]=asd.first;
s.pop();
}
sort(zxc,zxc+rty);
int j=0;
for(int i=0;i<n;i++)
{
if(j<rty && zxc[j]==i)
{
j++;
if(s1[i]=='(' || s1[i]==')')
cout<<"()";
else
cout<<"[]";
}
else
cout<<s1[i];
}
return 0;
}
by wwldx @ 2020-03-30 16:57:36
@Hilarious_Reality 嗯嗯嗯,是的,我访问栈顶元素的位置不对,改了后就过了,谢谢大佬啦
by littlefrog @ 2020-04-13 20:14:29
@wwldx 是的,如果数据是形如这样的:
]]]]]]]]]]]]]]]]]]]]
这份代码会RE
by conprour @ 2020-11-27 23:41:10
//层主的思路和我一样,都没有特殊处理栈
//(甚至RE的点相同)
#include<bits/stdc++.h>
using namespace std;
int cnt;
char ans[105],b[105];
int pos[105];
struct node
{
char x;
int y;
}a[105];
stack<node> s;
int main()
{
scanf("%s",b);
int l=strlen(b);
for(int i=0;i<l;i++)
a[i].x=b[i];
for(int i=0;i<l;i++)
{
a[i].y=i;
}
for(int i=0;i<l;i++)
{
if(a[i].x=='('||a[i].x=='[')
{s.push(a[i]);ans[cnt++]=a[i].x,pos[a[i].y]=1;continue;}
if(!s.empty())
{
node tmp=s.top();
if((tmp.x=='('&&a[i].x==')')||(tmp.x=='['&&a[i].x==']'))
{s.pop();ans[cnt++]=a[i].x;pos[tmp.y]=0;}
else
{
pos[i]=1;
ans[cnt++]=a[i].x;
}
}
else {pos[i]=1;ans[cnt++]=a[i].x;}
}
/*
while(!s.empty())
{
int t=s.top();
s.pop();
else ans2[++cnt2]='(';
}
*/
for(int i=0;i<cnt;i++)
{
// printf("##%d##",pos[i]);
if(pos[i]==1)
{
if(ans[i]==']'||ans[i]=='[') printf("[]");
if(ans[i]=='('||ans[i]==')') printf("()");
}
else printf("%c",ans[i]);
}
return 0;
}