题目描述(ID:12014)
标题: | 括号匹配 | ||
标签: | 数据结构 栈 | ||
详情: | 在编程当中我们只会用到三种括号:圆括号(),方括号[]和花括号{},编译器在编译的时候会检查括号是否正确匹配。例如{[()]}、{()[]{}}都是合法的匹配。但是([)]则是不合法的匹配。请编写一个程序来判断输入的括号序列是否合法。 | ||
输入格式: | | ||
输出格式: | | ||
限制: | 每个测试点1秒 | ||
样例: |
|
题解
利用栈“先进先出”的特性,将三种左括号入栈。遇到三种右括号则与栈顶匹配,不匹配则结束,匹配则将栈顶指针下移。如果未遇到右括号,则对栈顶指针进行判定,为0表示合法匹配。
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int main()
{
string parentheses, s;
getline(cin, parentheses);//读入括号串
int i, len, top;
len = parentheses.length();//括号串长度
top = 0;
for(i = 0; i <= len - 1; i++){
if(parentheses[i] == '(' || parentheses[i] == '[' || parentheses[i] == '{'){//三种左括号入栈
s[++top] = parentheses[i];
}
if(parentheses[i] == ')'){
if(s[top] == '('){
top--;
}
else{
cout << "NO" << endl;
return 0;
}
}
if(parentheses[i] == ']'){
if(s[top] == '['){
top--;
}
else{
cout << "NO" << endl;
return 0;
}
}
if(parentheses[i] == '}'){
if(s[top] == '{'){
top--;
}
else{
cout << "NO" << endl;
return 0;
}
}
}
if(top == 0){//合法匹配
cout << "YES" << endl;
}
else{
cout << "NO" << endl;
}
return 0;
}