-
输入
- 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符 输出
- 每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No 样例输入
-
3 [(]) (]) ([[]()])
样例输出
-
No No
Yes
-
-
**此题堆栈解决,由于我最近在学习C++,单是还没学到stack,所以暂时用的vector,理论上是一样的,注意特殊情况,和最后堆栈是否为空
-
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
int N;
cin>>N;
while(N--)
{
string s;
vector<char> stack;
cin>>s;
if(s.size()%2!=0 || s[0]==']' || s[0]==')')//如果长度为单数或者以 ] ) 开头的直接pass掉,浪费时间
cout<<"No"<<endl;
else
{
bool flag = true;//标记变量
for(int i=0;i<s.size();i++)
{
if(s[i]=='[' || s[i]=='(')//遇到左半边就入栈
stack.push_back(s[i]);
else if(s[i]==']')//遇到右边的括号
{
if(stack.back()!='[')// 判断是否匹配
{
flag = false;//不匹配结束循环,标记为false
break;
}
else
stack.pop_back();//如果匹配千万不要忘记出栈!!
}
else if(s[i]==')')//原理同上
{
if(stack.back()!='(')
{
flag = false;
break;
}else
stack.pop_back();
}
}
if(stack.empty()&&flag)//yes的条件有两个1,标记为真,2.堆栈为空
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
return 0;
}
//c++新手,想装X,所以就用C++写的,如果你也想装X,滚去学C++吧,我相信你会放弃的!-_- `
NYOJ-2括号配对问题
最新推荐文章于 2018-04-26 20:20:00 发布
描述
现在,有一行括号序列,请你检查这行括号是否配对。