假设表达式中允许包含两种括号:圆括号和方括号。编写一个算法判断表达式中的括号是否正确配对。
输入
由括号构成的字符串,包含”(“、”)“、”[“和”]“。
输出
如果匹配输出YES,否则输出NO。
样例输入
[([][]())]
样例输出
YES
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
char s[1001];
while (cin >> s)
{
char a[1001];
int k = 1;
a[0] = '1';
int x = 0;
for (int i = 0; i < strlen(s); i++)
{
if (s[i] == '(' || s[i] == '[' || s[i] == '{')
{
a[k++] = s[i];
}
else
{
if (s[i] == ')'&&a[k - 1] == '(')
{
k--;
}
else
{
if (s[i] == ']'&&a[k - 1] == '[')
{
k--;
}
else
{
if (s[i] == '}'&&a[k - 1] == '{')
{
k--;
}
else
{
cout << "NO";
k = 1;
x = 1;
break;
}
}
}
}
}
if (x == 0 && k == 1)
cout << "YES";
if (k != 1)
cout << "NO";
}
return 0;
}
由于只有三种括号,所以直接判断即可