STL-B Parentheses Balance (UVA-673)

本文介绍了一种使用栈实现括号匹配的有效算法。通过遍历输入字符串并利用栈来跟踪括号,该算法能准确判断括号是否正确配对。文章详细解释了如何处理不同类型的括号,并给出完整的 C++ 实现代码。

括号匹配问题

--最开始的思路是用两个栈分别保存前括号 与 后括号 但是遇到了蜜汁编译错误...现在暂时不懂原因


然后思路就是遇到前括号就直接压入栈中,对比栈顶与后一个括号是否匹配。

若匹配,则弹出。

最后检查栈里是否还有元素。

#include <stdio.h>
#include <stack>
#include <string.h>


using namespace std;

int bijiao(char a,char b)
{
    if (a=='('&&b==')')
        return 1;
    else if (a=='['&&b==']')
        return 1;
    else
        return 0;
}
int main()
{
    int n,i,flag=0;
    char ch,cs[300];
    scanf("%d",&n);
    getchar();
    while (n--)
    {
        flag = 0;
        stack <char> fir;
        //stack <char> sec;
        fgets(cs,300,stdin);//fgets会读入回车符
        if (cs[0]=='\n')
        {
            printf("Yes\n");
            continue;
        }
        int l = strlen(cs)-1;

        for (i=0;i<l;i++)
        {
            ch = cs [i];
            if (ch!='['&&ch!=']'&&ch!='('&&ch!=')')
            {
                flag = 1;
                break;
            }
        }

        if (l%2)
        {
            printf("No\n");
            continue;
        }

        for(i=0;i<l;i++)
        {
            if (cs[i]=='('||cs[i]=='[')
            {
                fir.push(cs[i]);
            }
            if (fir.empty())//解决  )(情况 异常
                continue;
            char t = fir.top();
            if (bijiao(t,cs[i])&&!fir.empty())
                fir.pop();
        }

        if (fir.empty()&&flag!=1)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值