没有任何用的题解(bushi)
2024-09-15 12:26:44
发布于:浙江
8阅读
0回复
0点赞
AC代码在后面
A542.括号匹配2
题目描述
给出包含“()”和“[]”的括号序列,判断是否合法。
输入格式
第一行一个整数n表示有n个字符串
接下来n行,每行一个字符串s
输出格式
如果合法输出Yes,否则输出No
输入输出样例
输入#1
3
([])
(([()])))
([()])()
输出#1
Yes
No
Yes
说明/提示
1<=strlen(s),n<=1001<=strlen(s),n<=100
只考虑是否匹配,不需要考虑括号的优先级
首先来一个至关紧要的输入!
int t;
cin>>t;
for(int x = 1;x<=t;x++){
string s;
cin>>s;
/*
没
有
了
*/
}
接下来创建一个栈
stack<char>a;
如果是[或者(,就输进去
if(s[i]=='('||s[i]=='['){
a.push(s[i]);
}
如果是)那判断栈顶是不是(,如果是就删了栈顶元素,否则输出No
if(s[i]==')'){
if(a.empty()||a.top()!='('){
cout<<"No\n";
a.push('1');
break;
}a.pop();
}
同上,判断]
if(s[i]==']'){
if(a.empty()||a.top()!=']'){
cout<<"No\n";
a.push('1');
break;
}a.pop();
}
最后看栈是不是空的
if(a.empty()){
cout<<"Yes\n";
}else if(a.top()!='1'){
cout<<"No\n";
}
合起来,撒花!!!
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
for(int x = 1;x<=t;x++){
string s;
cin>>s;
stack <char> a;
for(int i = 0;i<s.size();i++){
if(s[i]=='('||s[i]=='['){
a.push(s[i]);
}
if(s[i]==')'){
if(a.empty()||a.top()!='('){
//cout<<a.top()<<" "<<s[i]<<" ";
cout<<"No\n";
a.push('1');
break;
}a.pop();
}
if(s[i]==']'){
if(a.empty()||a.top()!='['){
cout<<"No\n";
a.push('1');
break;
}a.pop();
}
}
if(a.empty()){
cout<<"Yes\n";
}else if(a.top()!='1'){
cout<<"No\n";
}
}
return 0;
}
这里空空如也
有帮助,赞一个