括号匹配问题
1000(ms)
65535(kb)
2496 / 10237
假设表达式中允许包含两种括号:圆括号和方括号。编写一个算法判断表达式中的括号是否正确配对。
输入
由括号构成的字符串,包含”(“、”)“、”[“和”]“。
输出
如果匹配输出YES,否则输出NO。
样例输入
[([][]())]
样例输出
YES
思路:
#include<iostream> #include<stdlib.h> #include<stdio.h>//因为使用了getchar() using namespace std; typedef struct { char data[55]; int top; }Sqlist; int main() { Sqlist *l; l=(Sqlist *)malloc(sizeof(Sqlist)); l->top=0;//先将栈初始化 char ch; while((ch=getchar())!='\n')//一个一个输入字符 { if(ch==')'&&l->top>0&&l->data[l->top-1]=='(')//判断)号,如果前一个是(号,就直接消除(号; l->top--; else if(ch==']'&&l->top>0&&l->data[l->top-1]=='[')//同理。 l->top--; else l->data[l->top++]=ch; } if(l->top==0) cout<<"YES";//如果栈为空就说明括号刚好匹配。 else cout<<"NO"; return 0; }