1141--Brackets Sequence

题意是求括号匹配,添加最少数目的'(',')','[',']'使得输入的字符串中括号匹配。

#include <iostream>
#include <string>
using namespace std;

string s;
int l;
int len[110][110];
string res[110][110];


int main()
{
	cin>>s;
	l=s.length();

	for(int i=0;i<l;i++)
	{
		len[i][0]=0; res[i][0]="";
		len[i][1]=2;
		if(s[i]=='(' || s[i]==')')
			res[i][1]="()";
		else res[i][1]="[]";
	}

	for(int k=2;k<=l;k++) //k表示字符串的长度
		for(int i=0;i+k-1<l;i++)
		{
			len[i][k]=400;
			if(s[i]==']'|| s[i]==')')
			{
				len[i][k]=len[i+1][k-1]+2;
				if(s[i]==']')	res[i][k]="[]"+res[i+1][k-1];
				else res[i][k]="()"+res[i+1][k-1];
			}
			else
			{
				for(int j=i+1;j<=i+k-1;j++)
				{
					if(s[j]-s[i]==')'-'(' || s[j]-s[i]==']'-'[') //存在某个字符和初始字符匹配
					{
						if(len[i][k]>2+len[i+1][j-i-1]+len[j+1][k-j-1+i])
						{
							len[i][k]=2+len[i+1][j-i-1]+len[j+1][k-j-1+i];
							res[i][k]=s[i]+res[i+1][j-i-1]+s[j]+res[j+1][k-j-1+i];
						}
					}

					if(len[i][k]>len[i+1][j-i]+2+len[j+1][k-j-1+i]) //添加某个字符和初始字符匹配
					{
						len[i][k]=len[i+1][j-i]+2+len[j+1][k-j-1+i];
						if(s[i]=='(') res[i][k]=s[i]+res[i+1][j-i]+')'+res[j+1][k-j-1+i];
						else res[i][k]=s[i]+res[i+1][j-i]+']'+res[j+1][k-j-1+i];
					}
				}			
			}
		}
	cout<<res[0][l]<<endl;
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值