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