表达式的括号匹配实际上就是每个左右括号是否有相对的另一半。所以有栈来模拟顺序。
#include<bits/stdc++.h>
using namespace std;
stack<char>v;
int main()
{
string s;
cin>>s;
int p=0;
while(s[p]!='@')//结束条件
{
if(s[p]=='(')//左括号压栈
{
v.push(s[p]);
}
else if(s[p]==')')
{
if(!v.empty()&&v.top()=='(')//如果栈顶是(且现在是),是一对,所以弹出(
{
v.pop();
}
else
{
v.push(s[p]);
}
}
p++;
}
if(v.empty())//栈空则说明所有括号均配对
{
cout<<"YES";
}
else
{
cout<<"NO";
}
}

京公网安备 11010502036488号