ACM:UESTC - 649 括号配对问题 - stack

 

UESTC - 649  括号配对问题

Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: %lld & %llu

Description

大家都知道算术表达式中,括号必须配对,现在任意给出一个算术表达式,判断其括号是否配对。如果配对,输出Yes,否则输出No

Input

含多组测试数据,输入首先是一个整数T表示测试数据组数(0<T≤300)。随后有T行测试数据,长度不超过1000个字符,字符串间不含空格。

Output

对应每组测试数据,输出一行结果。

Sample Input


32(78-23)+78 
32
78)-(23+78)

Sample Output

Yes 
No

Hint

Source

wxiaoping - 2012

/*/
简单的括号配对问题

先把给出的数字串全部变成括号串,在用栈去压入括号,每次保存栈顶括号,如果栈顶括号能和下一个括号配对,就把栈顶弹出,指括号的指针后移。

最后判断栈内是否还有元素,如果有,就说明配对不成功。

AC代码:
/*/
#include"algorithm"
#include"iostream"
#include"cstring"
#include"cstdlib"
#include"cstdio"
#include"string"
#include"vector"
#include"stack"
#include"queue"
#include"cmath"
#include"map"
using namespace std;
typedef long long LL ;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define FK(x) cout<<"["<<x<<"]\n"
#define memset(x,y) memset(x,y,sizeof(x))
#define memcpy(x,y) memcpy(x,y,sizeof(x))
#define bigfor(T)  for(int qq=1;qq<= T ;qq++)

const int MX=1e5+1e3;

char s[MX],cc[MX],t[MX];

stack<char> st;

bool check() {
	int len = strlen(cc);
	while(!st.empty())st.pop();
	int i=0;
	char stc;
	while(i<len) {
		st.push(cc[i++]);
		stc=st.top();
		while(stc==‘(‘&&cc[i]==‘)‘){
			st.pop();
			i++;
			if(st.empty())break;
			stc=st.top();
		}
	}
	if(st.empty())return 0;
	return 1;
}

int main() {
	int T;
	t[0]=‘(‘,t[1]=‘)‘,t[2]=‘\0‘;
	scanf("%d",&T);
	bigfor(T) {
		scanf("%s",s);
		int len=strlen(s);
		int erear=0;
		for(int i=0; i<len; i++) {
			if(s[i]==‘(‘||s[i]==‘)‘) {
				cc[erear++]=s[i];
			}
		}
		cc[erear]=‘\0‘;
		if(check()) {
			puts("No");
		} else puts("Yes");
	}
	return 0;
}

  

 
时间: 2024-08-24 06:10:32

ACM:UESTC - 649 括号配对问题 - stack的相关文章

ACM:括号配对问题

括号配对问题:http://acm.nyist.net/JudgeOnline/problem.php?pid=2 思路:利用栈先进后出的性质,左符入,右符出. #include<iostream> #include<string> #include<stack> using namespace std; bool check(string str) { stack<char> stack; for (int i = 0; i < str.length

ACM试题 - 括号配对问题 - Java中字符串截取和定位问题

ACM试题题源(括号配对问题):http://acm.nyist.net/JudgeOnline/problem.php?pid=2 提交代码: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); String[] ans = new String[n];

NYOJ 2 括号配对问题【栈的运用】

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

nyist 2 括号配对问题

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

NYOJ2 括号配对问题

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

括号配对问题--nyoj-题目2

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

NYOJ题目2括号配对问题

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

stl-stack+括号配对问题

栈:stl的一种容器,遵循先进后出原则,,只能在栈的顶部操作,就像放盘子一样,洗好的盘子叠在上面,需要用时也是先从顶部拿.不允许被遍历,没有迭代器 基本操作: 1.头文件#include<stack> 2.top()  返回栈顶元素 3.pop()  弹出栈顶元素 4.empty()若栈空返回true,非空返回false 5.size() 返回栈的元素个数,在c++判断里,0是false,非0是true,作用可以上可以替代empty() 6.push() 入栈 栈的经典问题:括号配对问题 描述

NYOJ 2 括号配对问题

/* 题目大意:求括号是否配对 解题思路:开一个数组b,来作为栈,top为栈的下个下标控制入栈和出栈 难点详解:见代码 关键点:对进栈和出栈了解深刻一点 解题人:lingnichong 解题时间:2014/08/15  19:46:45 解题体会:最基本栈的运用.一开始还不是很清楚.可以先背一下,每天睡觉前再看一下,到用的时候,再根据这个模板写出来就可以了,这样印象会更加深刻了 */ #include<stdio.h> #include<string.h> #define MAXN