Description
给出一堆括号,看其是否匹配,例如 ()、()()、(()) 这样的括号就匹配,
)( 、)()) 而这样的括号就不匹配
Input
每一行代表一组测试样例,每组测试样例只包含’(‘和’)’,样例长度不超过100个字符
Output
如果所有的括号都匹配,那么输出YES,否则输出NO
Sample Input
()
)(
Sample Output
YES
NO
HINT
使用STL的stack容易实现。
AC代码一
#include <iostream>
#include <stack>
using namespace std;
int main()
{
string s;
while(cin>>s)//不能输入t;
{
int i;
stack<char> t;
for(i=0; i<s.size(); i++)
{
if(t.empty()&&s[i]==')')//如果没有数并且....;
{
cout<<"NO"<<endl;
break;
}
else if((t.empty()&&s[i]=='(')||(t.top()=='('&&s[i]=='('))
t.push(s[i]);
else if(t.top()=='('&&s[i]==')')
t.pop();
}
if(!t.empty())
cout<<"NO"<<endl;
if(t.empty()&&i==s.size())//这里必须加i==s.size(),因为如果中途输出NO不就直接退出了,如果中途退出的话,i就到不了size了;
cout << "YES" << endl;
}
return 0;
}
一、思路:首先是输入一个字符串,刚开始的时候是不向栈里面存东西,如果第一个字符是’)'的话就输出NO并且让它返回,如果第一个字符是‘(’的话就要开始存数了,遇到‘(’存,遇到‘)’消除;
之后如果栈中没有东西了而且一直从字符串的开头判断到结尾的话则为YES,但是如果有东西则为NO;
二、stack详解
1、头文件#include <stack>
2、定义stack <类型> 名称;
3、成员函数介绍:
例如:stack<char> s;
(1)s.empty();
堆栈为空则返回1,堆栈有数则返回0;
(2)s.pop();
移除栈顶元素
(3)s.push();
在栈顶增加元素
(4)s.size();
返回栈中元素数目
(5)s.top()
返回栈顶元素
4、注意事项
(1)stack 只能靠push输入,不能靠cin
(2)stack没有迭代器
(3)stack只能访问栈顶端的元素
(4)pop()移除下一个元素,但是并不将它返回;top()返回下一个元素,但是并不移除它,如果你想移除stack的下一个元素同时并返回它,那么在这两个函数就得调用。
(5)如果stack内没有元素,则执行top()和pop()会导致未定义的行为,你可以采用成员函数size()和empty()来检验容器是否为空。
AC代码二
#include <iostream>
#include <stdio.h>
using namespace std;
string s;
bool pd()
{
int cnt=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='(')
++cnt;
else if(s[i]==')')
{
if(!cnt)
return false;//不可能出现负数,因为如果是0的话已经返回false了;
--cnt;
}
}
return cnt?false:true;
}
int main()
{
while(cin>>s)
printf(pd()?"YES\n":"NO\n");
return 0;
}
1、三目运算符
a>b?a:b相当于c=a>b?a:b,如果c成立的话返回a,否则返回b;
这里是:cnt如果不等于0就返回false,否则返回true
AC代码三
#include <iostream>
#include <algorithm>
#include <stack>
#include <string>
using namespace std;
int main()
{
string s;
stack<int> sta;
while(cin>>s)
{
while(!sta.empty())
sta.pop();
int len=s.size();
for(int i=0;i<len;i++)
{
if(s[i]=='(')
sta.push(1);
else
{
if((!sta.empty()) && (sta.top()==1))
sta.pop();
else
sta.push(0);
}
}
if(!sta.empty())
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}
}