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 tangrunxi @ 2020-03-30 16:17:46
@wwldx 数组开大点
by tangrunxi @ 2020-03-30 16:18:20
好像也不行
by wwldx @ 2020-03-30 16:23:39
@tangrunxi 应该跟数组大小无关,数组最大是100,我直接开了200的。。。
by tangrunxi @ 2020-03-30 16:25:40
@wwldx 好的,我看看
by wwldx @ 2020-03-30 16:27:24
@tangrunxi 谢谢大佬了
by tangrunxi @ 2020-03-30 16:27:52
@wwldx 奇怪,我随便试了几个没错啊
by tangrunxi @ 2020-03-30 16:28:12
难道这题数据玄学
by tangrunxi @ 2020-03-30 16:29:47
@wwldx 我也不知道了,随便试了几个没错
by wwldx @ 2020-03-30 16:32:37
@tangrunxi 这咋办嘛,我换写法试试,谢谢大佬了
by Hexarhy @ 2020-03-30 16:45:13
@wwldx 可能栈空时你却试图访问栈顶元素