nyoj2括号配对问题

简介: 点击打开链接 题目2题目信息运行结果本题排行讨论区 括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数N(0

点击打开链接

题目2 题目信息 运行结果 本题排行 讨论区

括号配对问题

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

题目很典型,经典的栈的应用,去年已经水过,今天学弟问我,给他用数组讲了一遍,用stack讲了一遍,2种方法思路一样,但是stack却一直出现RuntimeError。研究了一个多小时,发现指针在中间会指错,没有考虑到中间会有栈空的情况,改过,AC!

#include<cstdio>
#include<cstring>
int main()
{
	int T,i,len,top;
	char a[11000],b[11000];
	scanf("%d",&T);
	while(T--)
	{
		scanf("%s",a);
		len=strlen(a);
		top=2;
		b[1]=a[0];
		for(i=1;i<len;i++)
		{
			if(a[i]=='('||a[i]=='[')
				b[top++]=a[i];
			if(a[i]==')')
			{
				if(b[top-1]=='(')
					top--;
				else
					b[top++]=a[i];
			}
			if(a[i]==']')
			{
				if(b[top-1]=='[')
					top--;
				else
					b[top++]=a[i];
			}
		}
		if(top==1)
			printf("Yes\n");
		else
			printf("No\n");
	}

}

#include<cstdio>
#include<cstring>
#include<stack>
using namespace std;
stack< char >b;
int main()
{
	int T,i,len;
	char a[11000];	
	scanf("%d",&T);
	while(!b.empty())
			b.pop();
	while(T--)
	{
		scanf("%s",a);
		len=strlen(a);
		b.push(a[0]);
		for(i=1;i<len;i++)
		{
			if(b.empty())
				b.push(a[i]);
			else if(a[i]=='('||a[i]=='[')
				b.push(a[i]);
			else if(a[i]==')')
			{
				if(b.top()=='(')
					b.pop();
				else
					b.push(a[i]);
			}
			else if(a[i]==']'&&!b.empty())
			{
				if(b.top()=='[')
					b.pop();
				else
					b.push(a[i]);
			}	
		}
		if(!b.empty())
			printf("No\n");
		else
			printf("Yes\n");
		while(!b.empty())
			b.pop();

	//	b.clear();
	}
	return 0;
}


 

目录
相关文章
|
3月前
LeetCode题 338比特位计数,20有效的括号,415字符串相加
LeetCode题 338比特位计数,20有效的括号,415字符串相加
37 0
|
5月前
|
存储 算法
【LeetCode】每日一题&最后一个单词的长度&投票法求解多数元素&异或操作符巧解只出现一次的数字&整数反转
【LeetCode】每日一题&最后一个单词的长度&投票法求解多数元素&异或操作符巧解只出现一次的数字&整数反转
|
9月前
|
存储 算法
算法训练day11|20. 有效的括号;1047. 删除字符串中的所有相邻重复项;150. 逆波兰表达式求值
算法训练day11|20. 有效的括号;1047. 删除字符串中的所有相邻重复项;150. 逆波兰表达式求值
|
10月前
蓝桥——括号合法组合 2020-11-26
蓝桥——括号合法组合 2020-11-26
|
10月前
|
算法
leetcode算法-有效的括号
leetcode算法-有效的括号
38 0
|
算法 Java
算法打卡Day26_leetcode _20.有效的括号
算法打卡Day26_leetcode _20.有效的括号
算法打卡Day26_leetcode _20.有效的括号
每日三题-组合总和、全排列、括号生成
每日三题 组合总和 全排列 括号生成
57 0
每日三题-组合总和、全排列、括号生成
每日三题-有效的括号、最长有效括号、最小栈
每日三题 有效的括号 最长有效括号 最小栈
79 6
每日三题-有效的括号、最长有效括号、最小栈
|
C语言
括号配对问题
括号配对问题
116 0
括号配对问题
括号有效配对一箭三连(一)
1) 任何一个左括号都能找到和其正确配对的右括号 2) 任何一个右括号都能找到和其正确配对的左括号 问题一: 怎么判断一个括号字符串有效 问题二:括号最多嵌套几层
80 0