Time Limit: 1 Sec Memory Limit: 128 Mb
Description
给一个长度不大于100的字符串,问该字符串里出现的括号是否合法。
字符串只会出现三种括号,“[]”,“()”,“{}”,且形如“({[]})”为合法,形如“[(])”为不合法。
Input
单组数据。
长度不大于100的字符串,字符串中不存在空格。
Output
如果该字符串中出现的所有括号都合法,输出“Yes”,否则输出“No”。
Sample Input
(a+b)!=c
Sample Output
Yes
代码实现
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <cstring>
#include <stack>
using namespace std;
char buf[101];
stack<char>kuohao;
/*
注意队列一开始可能为空的情况
注意最后队列可能不为空,即还有左括号在队列内、未完全匹配的情况
*/
int main()
{
scanf("%s", &buf);
int len = strlen(buf);
int flag = 1;
for (int i = 0; i < len; i++)
{
if (buf[i] == '(' || buf[i] == '[' || buf[i] == '{')
{
kuohao.push(buf[i]);
}
else if (buf[i] == ')')
{
if (!kuohao.empty() && kuohao.top() == '(')
kuohao.pop();
else
{
flag = 0;
break;
}
}
else if (buf[i] == ']')
{
if (!kuohao.empty() && kuohao.top() == '[')
kuohao.pop();
else
{
flag = 0;
break;
}
}
else if (buf[i] == '}')
{
if (!kuohao.empty() && kuohao.top() == '{')
kuohao.pop();
else
{
flag = 0;
break;
}
}
}
if (!kuohao.empty())flag = 0;
if (!flag)printf("No\n");
else printf("Yes\n");
}