猿问

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

刚学到数据结构,奇怪的是第一次找不到这类的视频了,一搜全是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吗,但事实半个括号明显是不完整的,都不成对,就更谈不上配对了啊。还有上面的分析里说左括号进栈我理解,右括号出栈我就不理解了,不要它可以不让它进栈,可是根本没让它进栈过又怎么让它出栈呢?

所谓难者不会,会者不难,我在这上面浪费很多时间了,请各位高手帮忙指点迷津,谢谢了!

迷失代码林
浏览 1492回答 1
1回答

Caballarii

碰到左括号就进栈,碰到右括号是把栈里的左括号出栈一个,这样一对括号就匹配了。最后结果有三种情况运行结束了栈不是空的,说明左括号比右括号多,括号不匹配运行结束栈空了,说明左右括号一样多,匹配了运行过程中栈为空的时候又碰到右括号要求出栈,说明这个右括号没有左括号匹配,括号不匹配
随时随地看视频慕课网APP

相关分类

Java
我要回答