啦啦啦,由于这几天自己复习数据结构复习一下栈的用法做了一道万年老题练练手,发现会有一些小错误,所以值得纪念。
题目:传送门
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
char kuohao[1000000];
cin>>kuohao;
stack<char> bra;
int l=strlen(kuohao);
for(int i=0;i<l;i++)
{
if(kuohao[i]=='(')//左括号入栈
{
bra.push(kuohao[i]);
}
else if(kuohao[i]==')'&&bra.empty()==0)//一定要判空,否则会RE
{
bra.pop();
}
else if(bra.empty()&&kuohao[i]==')')//这里也是,必须要判空。
{
cout<<"NO";
return 0;
}
}
if(bra.empty())//若栈为空则满足条件
{
cout<<"YES";
}
else
{
cout<<"NO";
}
return 0;
}
建立一个栈,每次碰到左括号就入栈,碰到右括号就出栈。注意出栈之前要判空,如果某一次读到了右括号但栈为空,那么说明多了右括号,一定不对,就直接输出“NO”然后return 0就可以了。等到整个程序结束之后再次对栈判空,若栈为空则没有问题,若栈非空则多了左括号。
一定要注意细节!!!!!