又见括号问题

在黄霖的博客里看到这道题  是他们湘大比赛的一道 刚开始自己想的比较复杂 一看他 的 代码 原来这么简单 啊啊~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;
}


原文地址:https://www.cnblogs.com/assult/p/3098007.html