0
束礼熙
初级守护
初级守护
Parentheses Balance(括号平衡,UVA673)
题目描述
给定一个由括号()和[]组成的字符串,只有以下三种类型的字符串才认为是正确的:
1、字符串是空的
2、如果A和B是正确的,AB是正确的
3、如果A是正确的,(A)和[A]是正确的
编写一个程序,给定一个这种类型的字符串序列并检查它们的正确性。字符串的最大长度是128.
输入格式
第一行,一个整数N(N≤20),表示接下来将有N个字符串
接下来N行,每行一个字符串,字符串由()或者[]组成
输出格式
对于每个字符串输出一行,如果是正确输出'Yes',否则输出'No'
输入输出样列
输入样例1:
3 ([]) (([()]))) ([()[]()])()
输出样例1:
Yes No Yes
【耗时限制】1000ms 【内存限制】64MB
我用栈写的 不知道为啥20分:( 样例是对的
思路是:遇到左括号入栈 如果不是左括号就判断右括号是否匹配并且栈是否为空 如果匹配不了而且栈空了 就输出No
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
string s;
while(n--)
{
stack <char> a;
cin>>s;
bool flag=1;
for(int i=0;i<s.size();i++)
{
if(s[i]=='('||s[i]=='[')
a.push(s[i]);
else
{
if(a.empty()||(s[i]==']'&&a.top()!='[')||(s[i]==')'&&a.top()!='('))
{
flag=0;
continue;
}
a.pop();
}
}
if(a.empty()&&flag)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
束礼熙在2021-02-01 22:10:14追加了内容
输入输出样例是:有换行
束礼熙在2021-02-01 22:24:55追加了内容