括号的匹配方法

原创 2012年03月29日 17:53:21

输入括号的数目,输出括号的各种合法匹配样式 如

输入 2

输出 

 ( ())

()()

据说这是一道某公司的面试题,我们先来分析一下。括号匹配有合法有的不合法 如 (()))( 这样就不是合法的匹配样式。为了避免这种情况的出现,记录当前左括号的个数和右括号的个数,使右括号的个数不大于左括号的个数。主要思想类似于0-1背包问题,当进行到某一步的时候 有两种方法:放'(' 和 放 ')'

void maching(int left,int right,int sum,vector<char> bracket)
{
	if (left==sum&&right==sum)  //如果左边和右边都为要匹配的个数,则输出结果
	{
		vector<char>::iterator iter=bracket.begin();
		for ( ;iter!=bracket.end();iter++)  
		{
			cout<<*iter<<' ';
		}
		cout<<endl;
		return ;
	}
	if (left<=sum)
	{
		bracket.push_back('(');    //放入左括号,然后递归
		maching(left+1,right,sum,bracket);
		bracket.pop_back();        //递归后弹出左括号
	}
	
	if (left>right&&left<=sum)
	{
		bracket.push_back(')');
		maching(left,right+1,sum,bracket);
		bracket.pop_back();
	}
}
int main(int argc, char* argv[])
{
	vector<char> bracket;    //记录当前的匹配样式
	int num;
	cin>>num;                //输入括号的个数 
	maching(0,0,num,bracket);
	return 0;
}

项目3 -- 括号的匹配 顺序栈方法

/*    * Copyright (c) 2015, 烟台大学计算机与控制工程学院    * All rights reserved.    * 文件名称:main.cpp,sqstack.cpp,...

链栈的简单实现及括号匹配问题的链栈解决方法

链栈的简单实现及括号匹配问题的链栈解决方法

qt中的正则表达式QRegExp使用以及匹配中括号[]方法

Qt的SDK里包含一个很帮的GUI工具,可以方便我们进行这类转换并测试你的表达式。可以按照如下的方式打开:“开始”->“程序”->“Qt SDK by Nokia v2010.02.1 (open ...

匹配括号( ( ),{ },[ ]等左右对应的字符 ) 的一种方法

前两天写那个异步函数顺序执行的过程中,动态修改函数,遇到setTimeout,我需要提取执行的时间,形如: setTimeout(function() { output.inne...
  • twoByte
  • twoByte
  • 2017年04月13日 17:14
  • 1301

华为2014机考题目_判断if括号匹配是否合法_堆栈_简单的方法- -

/******************************************************** Copyright (c) 2013, binzhouweichao@163.c...

关于括号匹配数目的动态规划算法的解决方法

前段时间在做关于华为OJ平台的闯关题目,第三关中有一道关于

c++括号匹配

  • 2014年12月05日 15:26
  • 168KB
  • 下载

字符匹配 与 中括号表达式

句点 (.) 匹配字符串中的各种打印或非打印字符,只有一个字符例外。这个例外就是换行符 (\n)。下面的正则表达式匹配 aac、abc、acc、adc 等等,以及 a1c、a2c、a-c 和 a#c:...
  • lvjayj
  • lvjayj
  • 2014年09月10日 22:15
  • 911

括号匹配加表达式

  • 2014年11月16日 21:43
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:括号的匹配方法
举报原因:
原因补充:

(最多只允许输入30个字)