一道洛谷的入门题,关于栈的。有多种解法,正在学习栈,所以使用栈敲的。
#include <bits/stdc++.h>
using namespace std;
bool judge(string s)
{
int i=0;
stack<char> p;
while(s[i]!='@')
{
if(s[i]=='(') p.push(s[i]);
else if(s[i]==')')
{
if(p.empty()) return 0;
else if(p.top()=='(')
p.pop();
else return 0;
}
i++;
}
if(!p.empty()) return 0;
else return 1;
}
int main()
{
string s;
cin>>s;
if(judge(s)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
system("pause");
return 0;
}
解题思路:
利用栈,遇到左括号就入栈,遇到右括号就配对,无关的不需要管。最后看是不是空,不空说明有多的左括号。
其实本题使用其他方法也很简单,例如设立一个flag=0,遇到右括号--,遇到左括号++,对flag值进行判断得出结果。
因为本人正在学习栈,所以使用栈敲的。哪里有问题的话请各位大佬指出