您的位置:首页 > 其它

UVA 673 - Parentheses Balance

2017-10-01 11:03 387 查看
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=614

题目大意:括号的匹配。

分析:利用栈模拟一边,如果是左括号就加入栈,如果是右括号,就检验与栈顶元素是否匹配。需要注意的是:当遇到右括号时要判断栈是否为空,如果栈为空,就直接跳出;还有当遇到只有\0的情况,需要输出Yes,所以不能用scanf,要用gets输入。

ac代码

#include<cstdio>
#include<cstring>
#include<stack>

using namespace std;

char str[130];

int main()
{
int T;
scanf("%d", &T);
getchar();
for(int t = 1; t <= T; t++)
{
stack<char> s;
int flag = 1;
gets(str);
if(str[0] == '\0')
{
printf("Yes\n");
continue;
}
int len = strlen(str);
if(len % 2)flag = 0;
else
{
for(int i = 0; i < len; i++)
{
if(str[i] == '(' || str[i] == '[')s.push(str[i]);
if(str[i] == ')')
{
if(s.empty())
{
flag = 0;
break;
}
if(s.top() == '(')s.pop();
else
{
flag = 0;
break;
}
}
if(str[i] == ']')
{
if(s.empty())
{
flag = 0;
break;
}
if(s.top() == '[')s.pop();
else
{
flag = 0;
break;
}
}
}
if(!s.empty())flag = 0;
}
if(flag)printf("Yes\n");
else printf("No\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: