北方有小仙儿 @ 2018-08-31 21:01:34
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
int f[105][105];
char a[105],b[105];
char q[105];
int top,head;
int main()
{
cin>>a;
int len=strlen(a);
for(int i=0;i<=len;i++)
{
if(a[i]=='(')
{
q[++top]=a[i];
b[++head]=a[i];
b[++head]=')';
}
if(a[i]=='[')
{
q[++top]=a[i];
b[++head]=a[i];
b[++head]=']';
}
if(a[i]==')')
{
if(q[top]=='(')
{
top--;
b[head]=a[i];
}
else {
top--;
b[++head]='(';
b[++head]=a[i];
}
}
if(a[i]==']')
{
if(q[top]=='[')
{
top--;
b[head]=a[i];
}
else {
top--;
b[++head]='[';
b[++head]=a[i];
}
}
}
for(int i=1;i<=head;i++)cout<<b[i];
return 0;
}
用了一个简单栈之后55分,不用栈直接对比前一个数就47分了。。很迷、、
by 诸神 @ 2018-11-06 21:52:26
同55
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cctype>
#include<stack>
using namespace std;
int n;
char s[110];
stack<int> st;
bool p[110];
int main()
{
cin>>(s+1);
// cout<<s+1;
n=strlen(s+1);
memset(p,1,sizeof(p));
for(int i=1;i<=n;i++)
{
if(s[i]=='(') st.push(i);
if(s[i]==')') p[st.top()]=0,p[i]=0,st.pop();
}
// for(int i=1;i<=n;i++) cout<<s[i]<<" ";
for(int i=1;i<=n;i++)
{
if(p[i]==1)
{
if(s[i]=='(') printf("()");
if(s[i]=='['||s[i]==']') printf("[]");
}
else
{
if(s[i]=='(') printf("(");
if(s[i]==')') printf(")");
}
}
return 0;
}
by Diwanul @ 2019-08-15 22:21:10
同55:
#include<bits/stdc++.h>
using namespace std;
char a[210];
int q[110];
int main(){
cin>>a;
int tot=0,l=strlen(a);
for(register int i=0;i<l;i++){
q[tot++]=i;
if(a[i]==')'&&a[q[tot-2]]=='('||a[i]==']'&&a[q[tot-2]]=='[')tot-=2,q[tot]=q[tot+1]=0;
}
for(register int i=0;i<tot;i++){
switch(a[q[i]+i]){
case '(':{
for(register int j=l;j>q[i]+1+i;j--)a[j]=a[j-1];
a[q[i]+1+i]=')';
l++;
break;
}
case ')':{
for(register int j=l;j>q[i];j--)a[j]=a[j-1];
a[q[i]+i]='(';
l++;
break;
}
case '[':{
for(register int j=l;j>q[i]+1;j--)a[j]=a[j-1];
a[q[i]+1+i]=']';
l++;
break;
}
case ']':{
for(register int j=l;j>q[i];j--)a[j]=a[j-1];
a[q[i]+i]='[';
l++;
break;
}
}
}
cout<<a;
return 0;
}