给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
Input
输入数据有多组,每组数据不超过100个字符并含有( ,) ,[, ],{, }一个或多个。处理到文件结束。
output
如果匹配就输出“yes”,不匹配输出“no”
Sample Input
sin(20+10)
{[}]
Sample Output
yes
no
思路:利用栈的机制,第一步先入栈,如果栈底不空且匹配,之后.pop出栈,这样是合法的,如果不合法就flag然后break退出。
#include<string>
#include<map>
#include<stack>
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
string str;
map<char,char> m;
m['(']=')';
m['[']=']';
m['{']='}';
while(getline(cin,str)){
stack <char> vis;
int flag=0;
int len=str.size();
for(int i = 0;i < len;i++){
if(str[i]=='('||str[i]=='['||str[i]=='{'){
vis.push(str[i]);
}
else if(str[i]==')'||str[i]==']'||str[i]=='}')
{
if(vis.size()&&m[vis.top()]==str[i]){
vis.pop();
}
else {
flag=1;
break;
}
}
}
if(!flag&&vis.size()==0){
cout<<"yes"<<endl;
}
else cout<<"no"<<endl;
}
return 0;
}