这篇文章主要介绍了c++栈(stack)的应用以及括号匹配问题的实现
描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有”[“,”]”,”(“,”)”四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
|
|
样例输出
|
|
解析
- 顺序扫描括号字符串中每一个字符,当遇到栈空或者遇到左括号时该括号进栈;
- 当扫描到某一种类型的右括号时,比较当前栈顶元素是否与之匹配,若匹配,出栈继续判断;
- 若当前栈顶元素与当前扫描的右括号括号不匹配,则将该右括号进栈(此时已经匹配失败);
- 若最终栈为空,则括号匹配成功,如果不为空,则不成功;
代码实现
12345678910111213141516171819202122232425262728293031323334353637using namespace std;int main(){int n;cin>>n;while(n--){stack<char> s;string ch;cin>>ch;for(int i=0;i<ch.length();i++){if(s.empty()){//如果栈为空继续进栈s.push(ch[i]);}else{if(ch[i]=='('||ch[i]=='[') s.push(ch[i]);else{if(ch[i]==')'){if(s.top()=='(')s.pop();else s.push(ch[i]);}if(ch[i]==']'){if(s.top()=='[')s.pop();else s.push(ch[i]);}}}}if(s.empty()){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}}}