码迷,mamicode.com
首页 > 其他好文 > 详细

括号配对问题

时间:2015-02-28 13:07:15      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

括号配对问题

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([[]()])
样例输出
No
No
Yes

来源
网络
上传者

naonao

思路:if ,else if,else三者之间的关系。。我当时else if换成if就不对,最后发现了,如果输入[],最后q.pop()。栈为空,如果是if的话,就输出No了。。这一点区别要注意。。

#include<iostream>
#include<stack>
#include<string.h>
using namespace std;
int main()
{
	int n,len,i;
	stack<char>q;
	char s[10000];
	cin>>n;
	while(n--)
	{
		int flag=1;
       while(!q.empty())
		   q.pop();
		cin>>s;
       len=strlen(s);
       for(i=0;i<len;i++)
	   {
		   if(s[i]=='['||s[i]=='(')
			   q.push(s[i]); 
		   if(s[i]==')')
		   {
			   if(!q.empty() && q.top()=='(')
                    q.pop();
			   else if(!q.empty() && q.top()!='(' ||q.empty())
			   {
                   flag=0;
                   cout<<"No"<<endl;
				   break;
			   }			   
		   }
		   if(s[i]==']')
		   {
			   if(!q.empty() && q.top()=='[')//   [] 
                    q.pop();
			   else if(!q.empty() && q.top()!='[' ||q.empty())
			   {
                   flag=0;
                   cout<<"No"<<endl;   //([[]()])
				   break;
			   }			   
		   }
		   
	   }
	   if(q.empty() && flag==1)//  ())
		   cout<<"Yes"<<endl;
	   if(!q.empty() &&flag==1)     // (()
		   cout<<"No"<<endl;
	}
	return 0;
}

括号配对问题

标签:

原文地址:http://blog.csdn.net/zuguodexiaoguoabc/article/details/43983747

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!