遇到所有的左括号,入栈,(标记为1,【标记为2,{标记为3
遇到所有的右括号,取栈顶元素,)相对应的是否为1,】是否为2,}是否为3
如果不是,break出来
#include <iostream>
#include<stack>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
char a[100];
int i,flag=0,len;
stack<int> s;
gets(a);
len=strlen(a);
for(i=0;i<=len-1;i++){
if(a[i]=='(')
s.push(1); //左括号标记入栈
if(a[i]=='[')
s.push(2);
if(a[i]=='{')
s.push(3);
if(a[i]==')'){ //右括号对比出栈
if(s.empty()==1){
flag=1;
break;
}
else{
if(s.top()==1)
s.pop();
else{
flag=1;
break;
}
}
}
if(a[i]==']'){
if(s.empty()==1){
flag=1;
break;
}
else{
if(s.top()==2)
s.pop();
else{
flag=1;
break;
}
}
}
if(a[i]=='}'){
if(s.empty()==1){
flag=1;
break;
}
else{
if(s.top()==3)
s.pop();
else{
flag=1;
break;
}
}
}
}
if(flag==0)
if(s.empty()==1)
printf("YES\n");
else
printf("NO\n");
else
printf("NO\n");
return 0;
}