给定入栈序列判断给定出栈序列是否合法(Exercise1_3_45,java)
来源:互联网 发布:文艺复兴基金 知乎 编辑:程序博客网 时间:2024/04/28 07:41
package chapterone;import java.util.Scanner;import java.util.Stack;/*** * @author luodijack * * thinking: 用一个辅助栈,将入栈序列按照某种顺序入栈,看是否可以产生出栈序列即可。 * 1)如果当前栈为空,且入栈序列不空,则入栈序列的下一个元素入栈; * 2)如果当前辅助栈的栈顶元素不等于出栈序列的首元素,那么入栈序列一直入栈,直到入栈序列为空。 * 3)如果当前辅助栈的栈顶元素等于出栈序列的首元素,那么栈顶元素弹出,出栈序列第一个元素移走; * 4)如果入栈序列为空,出栈序列第一个元素仍然不等于栈顶元素,则表示2个序列是不匹配的。 */public class Exercise1_3_45 { private static boolean judgeIsMatched(String a, String b) { boolean flag = true; Stack<String> assistantStack = new Stack<String>(); char[] inOrder = a.toCharArray(); char[] outOrder = b.toCharArray(); int index = 0; for (int i = 0; i < inOrder.length; i++) { while (!assistantStack.isEmpty() && assistantStack.peek().equals( String.valueOf(outOrder[index]))) { index++; assistantStack.pop(); } assistantStack.push(String.valueOf(inOrder[i])); } while (!assistantStack.isEmpty() && assistantStack.peek() .equals(String.valueOf(outOrder[index]))) { index++; assistantStack.pop(); } if (!assistantStack.isEmpty()) { flag = false; } return flag; } public static void main(String[] args) { Scanner scan = new Scanner(System.in); String a, b; System.out.println("please input the inOrder string"); a = scan.next(); while (true) { System.out.println("please input the string that need to match"); b = scan.next(); // scan.close(); if (judgeIsMatched(a, b) == true) { System.out.println("Matched!"); } else { System.out.println("Not Matched!"); } } }}
参考: http://blog.csdn.net/lisongjia123/article/details/49706363
0 0
- 给定入栈序列判断给定出栈序列是否合法(Exercise1_3_45,java)
- 给定入栈序列判断给定出栈序列是否合法
- 给定入栈序列,判断出栈序列是否合法
- 给定入栈序列,判定出栈序列是否合法
- 给定入栈序列,判断可能的出栈序列
- 给定入栈顺序,判断出栈顺序是否合法
- 给定入栈顺序,判断出栈顺序是否合法
- 判断给定序列是否是对应入栈序列的出栈序列(C++)
- 给出入栈序列,快速判断出栈序列是否合法
- 3.5判断出栈和入栈操作序列是否合法
- 判断出栈序列是否合法
- 判断出栈序列是否合法
- 判断出栈序列是否合法
- 判断出栈序列是否合法
- 给定入栈顺序,输出所有可能的出栈情况,并判断给定的序列是否为正确的输出序列
- 【100题】给定入栈序列,判断一个序列是否可能为输出序列
- 给定一个入栈序列,求所有可能的出栈序列
- 给定一个入栈序列,求所有可能的出栈序列
- prototype.js中Function.prototype.bind方法浅解
- hdu1051 Wooden Sticks(DP入门)
- Excel报表和如意报表构件
- Java线程池架构原理和源码解析(ThreadPoolExecutor)
- 如何查看网站的端口
- 给定入栈序列判断给定出栈序列是否合法(Exercise1_3_45,java)
- 曾经进公司面试的C语言有关指针和数组的笔试题
- 职群教育 | IOS开发 Swift语言入门(四):对象和类
- list()和listFiles
- 关于 sqlite3_key 和 sqlite3_rekey
- Android 中实现分享和第三方登陆---以新浪微博为例
- android:使用mediaplayer播放res/raw文件夹中的音乐
- [从头学数学] 第76节 小数除法
- 奇异值分解(SVD) --- 几何意义