通过Stack来判断程序括号的完整性(1304 P102)

来源:互联网 发布:新人学python还是php 编辑:程序博客网 时间:2024/05/16 12:51
使用Stack的一个实例Parentheses,通过创建Stack的泛型对象 Stack<String> stringStack = new Stack<>();来存储内容。
String str = StdIn.readString() 来读取输入的字符串,
通过String[] inputs 字符串数组来分割字符串, String[] inputs = str.spilt("");

    spilt()方法是通过去掉参数的方式来分割的,这里为空,即每个char都为一个element。

利用for()循环体来历遍:
for(String input : inputs){
    首先是存入左符号:
    if(input.equals("{") || input.equals("[") || input.equals("(")){
        stringStack.push(input);
    }
    如果不是左括号的话,要判断Stack是不是为空,如果为空,则直接输出为空。
    else if (!stringStack.isEmpty()){
        if(input.equals("}")){
            if(stringStack.pop().equals("{")){ //这里必然会执行一次pop操作,所以即使不匹配,也是会pop一个参数的
                StdOut.println("{}")
            }else{
                StdOut.println("'}' not equals '{'!");
                return; //结束程序(End of the program)
            }
        }else if(input.equals("]")){
            //类似
        }else if(input.equals(")")){
            //类似
        }else{
            StdOut.println("no right parentheses!");
            return;
        }
    }else{
        StdOut.println("stringStack size is zero!")    ;
        return;
    }
}


总结:
1.spilt()方法可以分割String类型的内容,通过参数分割。
2.for(String str : String[] strs) 循环体。
3.每次调用pop方法,只要执行,都会弹出一个值,Stack中的内容就会必然减少一。
4.return; 结束循环体

代码:
package chapter1.a3;import edu.princeton.cs.algs4.Stack;import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class Parentheses {    public static void main(String [] args){        edu.princeton.cs.algs4.Stack<String> stringStack = new Stack<>();        String str = StdIn.readString();        String[] inputs = str.split(""); //converts a string to an array of characters        for (String input : inputs){            if (input.equals("{") || input.equals("[") || input.equals("(")){                stringStack.push(input);            }else if (!stringStack.isEmpty()){                if (input.equals("}")){                    if (!stringStack.pop().equals("{")){ //here we have one pop operation, so now we stack less one elements                        StdOut.println("'{' is not equals '}'!");                        return;// finish circulation                    }else {                        StdOut.println("{}");                    }                }else if (input.equals("]")){                    if (!stringStack.pop().equals("[")){                        StdOut.println("'[' is not equals ']'!");                        return;                    }else {                        StdOut.println("[]");                    }                }else if (input.equals(")")){                    if (!stringStack.pop().equals("(")){                        StdOut.println("'(' is not equals ')'!");                        return;                    }else {                        StdOut.println("()");                    }                }            }else {                StdOut.println("Stack<String> is empty!");                return;            }        }        StdOut.println("stringStack is size : " + stringStack.size());    }}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 6岁儿童夜里盗汗惊战发抖怎么办 一个月大的小狗尾巴掉毛怎么办 口袋妖怪用修改器被ban了怎么办 联币金融提现不到账怎么办 秘密花园的手抄报怎么办?五年级 雷蛇鼠标不亮了怎么办呢 汽车后备箱的垫子好臭怎么办 摩托尾箱内衬味道太重怎么办 买房子把办贷款的单据丢了怎么办 鞋盒破损卖家拒绝退货怎么办 顺丰快递退回发件人签收失败怎么办 客户收到衣服后说衣服破损怎么办 纱窗被老鼠咬了个洞怎么办 双色印刷机开槽刀调不动怎么办 水管软管两端的螺帽下包生锈怎么办 棉花被子盖时间长了被芯变小怎么办 垫的被子发霉了啊没有地方晒怎么办 小孩拉尿在丝棉被棉怎么办 把兔子养大了竟然会咬人怎么办 小兔子生下来母兔子不喂奶怎么办 11个月的宝宝肚子有小白虫怎么办 电焊把脸烤了痒的不行怎么办? 还没满月的宝宝吐奶怎么办 周岁宝宝发烧腹泻吃药老吐怎么办 生完宝宝后肚皮很黑怎么办 两个月宝宝抵抗力差总生病怎么办 两岁宝宝只会说几个简单的词怎么办 两岁宝宝对绘本不感兴趣怎么办 一岁十个月宝宝不爱吃饭怎么办 孩子上三年级学习太差应该怎么办 mac系统打数字出显符号怎么办 我太粗心了工作中总犯错怎么办 四年级的孩子数学计算总粗心怎么办 小孩做作业拖拉的很厉害怎么办 二年级孩子做作业太粗心怎么办 发现孩子做作业时玩手机怎么办 高三孩子考试时慌乱老粗心怎么办 助班面试你的学生不喜欢你怎么办 上三年级的小孩不愿做作业怎么办 快一年了孩子上幼儿园总哭怎么办 宝宝吃多了吐了很多怎么办