给定入栈序列判断给定出栈序列是否合法(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