合法括号序列 V1

合法括号序列的定义是:
1.空序列是合法括号序列。
2.如果S是合法括号序列,那么(S)是合法括号序列。
3.如果A和B都是合法括号序列,那么AB是合法括号序列。

输入格式
输入一行,长度为N的括号序列S(0<=N<=50000,S只包括()这2种字符)
输出格式
输出一行,1表示括号序列合法,0表示括号序列不合法
输入样例
(())(
输出样例
0
有题目我们可以知道思路大概是:
我们把他简单的分为 2 类,左括号和右括号。其中左括号包括: ([{ ,右括号包括: )]} 。

一个合法的表达式,需要满足每一个左括号作为开始,都有与其匹配的右括号作为结束。

于是我们想到一个简单的判断方法,统计整个表达式中,每种括号出现的次数,如果成对的括号数量不相同,则不合法,否则合法。

这个方法的问题在于遇到这种不合法的序列 ))(( ,无法有效处理。

我们使用一种成对消除的思路来解决这个问题。

当计算机接受了一个左括号后,那么他后面合法的符号有 4 ​ 种, 可以是 3 ​ 种左括号中的任意一种,也可以是与他配对的右括号。

如果是左括号,则当前括号不是马上需要处理的括号了,问题转为处理下一个左括号。

当计算机接受了一个右括号,那么,这个右括号必须与之前的左括号匹配,否则序列就是非法的。

此处理过程与栈的特点相吻合,由此,在算法中设置一个栈,每读入一个括号,若是左括号则放在栈顶,等待与后面的右括号匹配,若是右括号,则判断与栈顶的括号是否匹配,不匹配则不合法(如果栈是空的,也是一种不匹配)。另外在算法结束的时候,栈应该是空的,
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值