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