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;
}


 

目录
相关文章
|
5月前
|
存储 算法 数据可视化
深入解析力扣161题:相隔为 1 的编辑距离(逐字符比较与动态规划详解)
深入解析力扣161题:相隔为 1 的编辑距离(逐字符比较与动态规划详解)
|
6月前
LeetCode题 338比特位计数,20有效的括号,415字符串相加
LeetCode题 338比特位计数,20有效的括号,415字符串相加
63 0
|
C语言
next数组的两种求法详解及完整代码
求字符串的next数组: 方法一: 这里我们将next数组第1,2位分别设为0,1(还有-1,0这种设法,这里先将其设为0,1若有需要再减一即可) 后面求解每一位的next值时,根据前一位进行比较。 从第三位开始,将前一位与其next值对应的内容进行比较, 如果相等,则该位的next值就是前一位的next值加上1; 如果不等,向前继续寻找next值对应的内容来与前一位进行比较, 直到找到某个位上内容的next值对应的内容与前一位相等为止, 则这个位对应的值加上1即为需求的next值; 如果找到第一位都没有
360 0
next数组的两种求法详解及完整代码
|
11月前
|
存储 算法
【LeetCode】每日一题&最后一个单词的长度&投票法求解多数元素&异或操作符巧解只出现一次的数字&整数反转
【LeetCode】每日一题&最后一个单词的长度&投票法求解多数元素&异或操作符巧解只出现一次的数字&整数反转
|
存储 算法
算法训练day11|20. 有效的括号;1047. 删除字符串中的所有相邻重复项;150. 逆波兰表达式求值
算法训练day11|20. 有效的括号;1047. 删除字符串中的所有相邻重复项;150. 逆波兰表达式求值
|
算法
leetcode算法-有效的括号
leetcode算法-有效的括号
55 0
每日三题-有效的括号、最长有效括号、最小栈
每日三题 有效的括号 最长有效括号 最小栈
100 6
每日三题-有效的括号、最长有效括号、最小栈
每日三题-组合总和、全排列、括号生成
每日三题 组合总和 全排列 括号生成
83 0
每日三题-组合总和、全排列、括号生成
|
算法 Java
算法打卡Day26_leetcode _20.有效的括号
算法打卡Day26_leetcode _20.有效的括号
算法打卡Day26_leetcode _20.有效的括号
|
算法
【Day21】LeetCode算法题 [921. 使括号有效的最少添加 ] [1706. 球会落何处]
学习LeetCode算法题 [921. 使括号有效的最少添加 ] [1706. 球会落何处]。
170 0
【Day21】LeetCode算法题 [921. 使括号有效的最少添加 ] [1706. 球会落何处]