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

使用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());

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值