看了网上一些关于这道题的解法,发现许多都写得很繁琐,简单的题当然简单做啦,所以码了一个比较简洁没有任何技术含量的解法~~
大的思路当然是一样的,’(’ 和 ‘[’ 进栈,遇到 ‘)’ 和 ‘]’ 就判断和栈顶元素是否匹配
题目描述
假设表达式中允许包含两种括号:圆括号和方括号。编写一个算法判断表达式中的括号是否正确配对。
输入
由括号构成的字符串,包含”(“、”)“、”[“和”]“。
输出
如果匹配输出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,否则输出NO
printf("NO");
else
printf("YES");
return 0;
}