洛谷 P1739 表达式括号匹配

110 阅读1分钟

一道洛谷的入门题,关于的。有多种解法,正在学习栈,所以使用栈敲的。 image.png

#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值进行判断得出结果。

因为本人正在学习栈,所以使用栈敲的。哪里有问题的话请各位大佬指出