问题:
Description
假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“ ”,且这三种括号可按任意的次序嵌套使用(如:…[…{… …[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的算法。输出结果YES 或者 NO。
Input
5+{[2X5]+2}
Output
YES
Sample Input
8-[{2+7]}
Sample Output
NO
HINT
Source
思路:栈的简单应用,扫描字符串,遇到左括号进栈,遇到右括号时,如果栈顶元素是相对应的左括号则出栈,最后栈为空时说明匹配成功
代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
char str[80];
int i;
char s[80];
int top=-1;
gets(str);
for(i=0;i<strlen(str);i++)
{
if(str[i]=='('||str[i]=='['||str[i]=='{')
{
top++;
s[top]=str[i];
}else if((str[i]==']' && s[top]=='[') || (str[i]==')' && s[top]=='(')||(str[i]=='}' && s[top]=='{'))
{
top--;
}
}
if(top!=-1)
printf("NO");
else
printf("YES");
return 0;
}