又见括号问题
在黄霖的博客里看到这道题 是他们湘大比赛的一道 刚开始自己想的比较复杂 一看他 的 代码 原来这么简单 啊啊~TAT。。。看完他的思想 自己在写了一遍,其实 写的 和他差不多啦。。
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,n,m,len,k,num,f[10010];
char s[10100];
while(~scanf("%d",&n))
{
while(n--)
{
scanf("%s",s+1);
len=strlen(s+1);
f[0]=0;
for(i=1;i<=len;i++)
if(s[i]=='(')
f[i]=f[i-1]+1; //左括号比右括号多的个数 f[i]都不能小于0
else f[i]=f[i-1]-1;
for(i=len;i>0;i--)
{
if(f[i]>=2&&s[i]=='(') //只有 f[i]>=2时 ‘(’变成‘)’ f[i]才不会<0
{
k=i;
break;
}
}
if(i==0)
printf("No solution\n");
else
{
for(i=1,num=0;i<k;i++)
{
if(s[i]=='(')
num++;
printf("%c",s[i]);
}
printf(")");
for(i=0;i<len/2-num;i++)
printf("("); //其他的只要先填完( 再填 )就ok了
for(j=0;j<len-k-i;j++)
printf(")");
printf("\n");
}
}
}
return 0;
}
浙公网安备 33010602011771号