题目描述
大家都知道算术表达式中, 括号必须配对, 现任意给出一个算术表达式, 判断其括号是否配对. 如果配对, 输出Yes, 否则输出No.本题不需要考虑表达式的合法问题。
Standard Input
含多组测试数据, 输入首先是一个整数T表示测试数据组数(0<T≤300). 随后有T行测试数据, 每行是长度不超过1000的数学表达式, 其内部不含空格.
Standard Output
对应每组测试数据, 输出一行题目要求的结果.
堆栈思路 但是如果输入的是纯字符串,输出的是Yes,这里需要加判断
#include<bits/stdc++.h>
#define N 1001
using namespace std;
int match(char a[],int len){
int flag_a=0;
int flag_b=0;
char s[N];
int top=0,i;
char temp;
for(i=0;i<len;i++){
if (a[i]=='('){
flag_a=1;
s[++top]=a[i];
continue;
}
if(a[i]==')'){
flag_a=1;
temp=s[top];
if(temp=='('){
flag_b=1;
top--;
continue;
}else{
flag_b=0;
break;
}
}
}
if((flag_a==1&&flag_b==1)&&(top==0)||flag_a==0){
return 1;
}else{
return -1;
}
}
int main(){
int T,len;
char a[N];
cin>>T;
while(T--){
cin>>a;
len=strlen(a);
int res=match(a,len);
if(res==1){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}
return 0;
}