【问题描述】
一个合法的括号串,是指只包含括号的串,如果满足如下条件:
(1)<> () [] {} 这四对括号是合法的;
(2)如果r是合法括号串,则<r> (r) [r] {r}也是;
(3)如果r,s是合法括号串,则rs也是;
所以<<>> , [<>{}(())],[({<>})]是合法的括号串,而)(,[( ])就不是。
【输入形式】
输入第一行正整数t (10 ≤ n ≤ 100),表示有多少组测试数据。
后面有t行,每行一个只包含8种括号符号的括号串。
40%的括号串的长度L 2 ≤ L≤ 20;
30%的括号串的长度L 2 ≤ L≤ 200;
20%的括号串的长度L 2 ≤ L≤ 2000;
10%的括号串的长度L 2 ≤ L≤ 20000;
#include<iostream>
#include<stack>
using namespace std;
char s(char);//返回与之搭配的字符串
int main() {
int t;
cin>>t;
for(int i=0; i<t; i++) {
string str;
cin>>str;
stack<char>mystack;//用栈
for(int j=0; j<str.size(); j++) {//for循环将该字符串进行遍历
if(mystack.empty()) {
mystack.push(str[j]);//栈为空就将当前字符压进去
continue;
}
if(s(mystack.top())==str[j])mystack.pop();//如果栈的顶部元素与该字符匹配就出栈
else mystack.push(str[j]);//不为空不匹配时也压进去
}
if(mystack.empty())cout<<"Yes"<<endl;//最后如果栈为空,说明字符串合法
else cout<<"No"<<endl;
}
return 0;
}
char s(char a) {
char key=0;
if(a=='{')key='}';
if(a=='<')key='>';
if(a=='[')key=']';
if(a=='(')key=')';
return key;
}版权声明:本文为longzaizai_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。