看了网上一些关于这道题的解法,发现许多都写得很繁琐,简单的题当然简单做啦,所以码了一个比较简洁没有任何技术含量的解法~~
大的思路当然是一样的,’(’ 和 ‘[’ 进栈,遇到 ‘)’ 和 ‘]’ 就判断和栈顶元素是否匹配
题目描述
假设表达式中允许包含两种括号:圆括号和方括号。编写一个算法判断表达式中的括号是否正确配对。
输入
由括号构成的字符串,包含”(“、”)“、”[“和”]“。
输出
如果匹配输出YES,否则输出NO。
样例输入
[([][]())]
样例输出
YES
下面上代码~
AC代码
#include<stdio.h>char stack[300],ori[300];//用一个stack数组做栈,用一个ori数组存储所有括号int main(){int top=0,i=0;scanf("%s",ori);while(ori[i]!='\0')//ori数组没有到最后{if(ori[i]=='('||ori[i]=='[')//压栈{top++;stack[top]=ori[i];}//以下是pop部分else if(ori[i]==']'&&stack[top]=='[')top--;else if(ori[i]==')'&&stack[top]=='(')top--;else//是为了应对这种类型的情况:()))))) {printf("NO");return 0;}i++;}if(top)//最后top=0的时候表示可以匹配,输出YES,否则输出NOprintf("NO");elseprintf("YES");return 0;}
传送门
962: 括号匹配问题