标题: | 括号匹配 | ||
标签: | 数据结构 栈 | ||
详情: | 在编程当中我们只会用到三种括号:圆括号(),方括号[]和花括号{},编译器在编译的时候会检查括号是否正确匹配。例如{[()]}、{()[]{}}都是合法的匹配。但是([)]则是不合法的匹配。请编写一个程序来判断输入的括号序列是否合法。 | ||
输入格式: | 只有一行,为( ) [ ] { }组成的序列,长度不超过100 | ||
输出格式: | 只有一行,如果是合法匹配则输出YES,不合法则输出NO,请注意大小写 | ||
限制: | 每个测试点1秒 | ||
样例: |
|
这个题如果用栈解决的话很容易,如果遇到左括号就放到栈中,遇到右括号就判断它和栈顶元素是不是匹配。匹配就删除栈顶元素,否则就把这个元素加进去。最后判断栈是否为空。
AC代码:
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
int main()
{
stack<int>s;
char a[100];
scanf("%s",a);
int n=strlen(a);
for(int i=0;i<n;i++)
{
if(a[i]=='('||a[i]=='['||a[i]=='{')
s.push(a[i]);
if(s.size()==0)//如果此时栈为空添加一个新的元素进去(说明此时没有左括号)
s.push(a[i]);
if(a[i]==')')
{
if(s.top()=='(')
s.pop();
else
s.push(a[i]);
}
if(a[i]==']')
{
if(s.top()=='[')
s.pop();
else
s.push(a[i]);
}
if(a[i]=='}')
{
if(s.top()=='{')
s.pop();
else
s.push(a[i]);
}
}
if(s.size())
printf("NO\n");
else
printf("YES\n");
return 0;
}