为了账号安全,请及时绑定邮箱和手机立即绑定

为什么要用【栈】来检测字符串“111(222)333”中包含的小括号是否配对。。。求指点

为什么要用【栈】来检测字符串“111(222)333”中包含的小括号是否配对。。。求指点

迷失代码林 2017-04-24 01:13:01
刚学到数据结构,奇怪的是第一次找不到这类的视频了,一搜全是C语言的,书上又说的不够清楚。这个题目一眼看到我就会联想到去用String的方法或数组来解答,书上用栈来解答说明这是栈的一个典型用法,那么能体现栈的什么优点呢?书上的解题代码:    Stack ss =new SequenceStack();//定义栈对象     String s="111(222)333;     int size=s.length();     boolean flag =false;     for(int i=0;i<size;i++){         char c=s.charAt(i);         switch(c){             case 40://左括号“(”             ss.push("(");//入栈             break;             case 41://右括号“)”             if(ss.pop().equals(")"){                 flag=true;             }         }     }     System.out.print("括号配对为:"+flag);书上有分析说“可以使用栈来存储字符串中的小括号。遍历字符串中的每个字符,遇到‘(’则入栈,遇到‘)’则出栈,查看出栈的元素是否为‘)’,如果为‘)’则配对,否则不配对”。如果字符串就只有这么半个括号,flag不也是为true吗,但事实半个括号明显是不完整的,都不成对,就更谈不上配对了啊。还有上面的分析里说左括号进栈我理解,右括号出栈我就不理解了,不要它可以不让它进栈,可是根本没让它进栈过又怎么让它出栈呢?所谓难者不会,会者不难,我在这上面浪费很多时间了,请各位高手帮忙指点迷津,谢谢了!
查看完整描述

1 回答

已采纳
?
Caballarii

TA贡献1123条经验 获得超629个赞

碰到左括号就进栈,碰到右括号是把栈里的左括号出栈一个,这样一对括号就匹配了。最后结果有三种情况

  1. 运行结束了栈不是空的,说明左括号比右括号多,括号不匹配

  2. 运行结束栈空了,说明左右括号一样多,匹配了

  3. 运行过程中栈为空的时候又碰到右括号要求出栈,说明这个右括号没有左括号匹配,括号不匹配

查看完整回答
1 反对 回复 2017-04-24
  • Caballarii
    Caballarii
    你贴的这段代码错漏百出,也运行不出正确结果
  • 迷失代码林
    迷失代码林
    是的,书上就这么写的,把我看晕了。经你这么一说我懂了,谢谢指点!
  • 1 回答
  • 0 关注
  • 1491 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信