通过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()); }}
阅读全文
0 0
- 通过Stack来判断程序括号的完整性(1304 P102)
- 利用堆栈补全表达式左括号(1309 P102)
- C实现Stack,并通过Stack来检查括号是否匹配
- 括号匹配-利用stack判断
- stack(括号,表达式)
- 判断括号匹配程序
- DoublingStackOfStrings(1308 P102)
- P102
- 求一个数的二进制表示方法(1305 P102)
- 判断文件类型(文件的真正类型,不是根据扩展名判断),通过文件头来判断
- 判断文件类型(文件的真正类型,不是根据扩展名判断),通过文件头来判断
- 通过反射来判断某个程序集中是否有实现该接口的类
- 通过js来判断浏览器的类型
- 管理Activity和Fragment(通过Stack<?>来进行管理)
- 括号配对(stack栈)
- STL-stack(括号配对)
- 通过程序来判断系统大小端问题
- 括号配对问题 栈(stack)的利用
- 用命令创建vue项目
- enumerate()
- 使用BS4爬取 51job 一页的招聘信息
- Android 倒计时跳转页面之handler的详细运用
- 关于洗牙的四大误区!
- 通过Stack来判断程序括号的完整性(1304 P102)
- Java四种线程池的使用
- 值得珍藏的spring架构与设计原理
- JVM内存回收知识点图解(二)
- Python之验证码面试题
- 数据结构实验之查找二:平衡二叉树
- 如何创建最小(大)堆(插入、删除)
- 输入两个字符串,从第一个字符串中,删除第二字字符串中的所有字符。
- 欧几里得求最大公约数