括号和括号
题目描述
有一串字符串只包含’(‘和’)‘,判断其是否为合法的括号匹配,每个’(‘均能在其右边找到与之唯一匹配的’)‘即合法。
输入格式
第一行为一个整数T(T<=100),表示T个测试数据。
接下来T行每行一个字符串s(只包含’(‘和’)',|s|<1e5)
输出格式
如果是合法匹配输出Yes,否则输出No。每个输出都为一行。
样例输入
2
(()(())()(()()))
())())((()(())
样例输出
Yes
No
思路:
栈,左括号入栈,有括号出栈,如果为空,输出No,结束之后判断栈是否为空,不空则为No。之前写的,有点冗余不想改了。
#include<bits/stdc++.h>
using namespace std;
main(){
int t;
cin>>t;
while(t--){
string s;
cin>>s;
stack<char> mstack;
int flag=0;
for(int i=0;i<s.length();i++){
if(s[i]=='('){
mstack.push(s[i]);
}else{
if(mstack.empty()){
flag=1;
break;
}else{
mstack.pop();
}
}
}
if(!mstack.empty()){
flag=1;
}
if(flag){
cout<<"No"<<endl;
}else{
cout<<"Yes"<<endl;
}
}
}