描述:给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
思路:使用栈,将字符串中的字符依次进栈,如果栈顶的两个字符相匹配(左括号和右括号匹配),则将这两个字符弹出。如果最后栈为空,说明是有效括号序列。
#include<iostream>
#include<stack>
using namespace std;
stack<char> q;
bool panduan(char a,char b){
if(a=='['&&b==']' || a=='{'&&b=='}' ||a=='('&&b==')')return true;
else return false;
}
int main(){
string s;
cin>>s;
// 这里的'0'仅用于占位,没有特殊含义,因此如果最后栈的大小为1时说明是有效括号序列
q.push('0');
for(int i=0;i<s.length();i++){
char tmp1=q.top();
q.push(s[i]);
char tmp2=q.top();
if(panduan(tmp1,tmp2)){
q.pop();
q.pop();
}
}
if(q.size()>1){
cout<<"Flase"<<endl;
}
else{
cout<<"True"<<endl;
}
return 0;
}