SWUST OJ 962:括号匹配问题

题干:
SWUST OJ 962:括号匹配问题_第1张图片
思路:这个题并不难,要用到栈。栈用来存放左括号。只是判断字符串结果时需要的步骤比较多,断定序列不匹配的因素有:

  1. 左右括号不匹配;
  2. 匹配到右括号时,栈空了;
  3. 字符串遍历完毕,但是栈仍不空。
    同时不满足以上三点即为成功匹配。

代码:

#include
using namespace std;

bool isleft(char ch);
bool isright(char ch);
bool equals(char a,char b);
bool judge(string str);

int main()
{
    string str;
    cin>>str;
    judge(str)?cout<<"YES":cout<<"NO";
    return 0;
}

bool isleft(char ch)
{
    if(ch=='('||ch=='[')
    {
        return true;
    }
    return false;
}

bool isright(char ch)
{
    if(ch==')'||ch==']')
    {
        return true;
    }
    return false;
}

bool equals(char a,char b)
{
    if((a=='(' && b==')')||(a=='[' && b==']'))
    {
        return true;
    }
    return false;
}

bool judge(string str)
{
    stack<char> s;
    for(int i=0;i<str.length();i++)
    {
        if(isleft(str[i]))
        {
            s.push(str[i]);
        }
        if(isright(str[i]))
        {
            if(s.empty())
            {
                return false;
            }
            if(equals(s.top(),str[i]) && !s.empty())
            {
                s.pop();
            }
            else
            {
                return false;
            }
        }
    }
    if(!s.empty())
    {
        return false;
    }
    return true;
}

你可能感兴趣的:(SWUST,OJ,数据结构80题)