输入:栈的输入序列和输出序列,如输入序列为1 2 3 4 5 6,输出序列为6 5 4 3 2 1
输出:push1|push2|push3|push4|push5|push6|pop6|pop5|pop4|po3|pop2|pop1
来源:2012年10月亚马逊天津地区在线笔试题
/*
Enter your code here. Read input from STDIN. Print output to STDOUT */
import
java.util.Scanner;
import
java.util.Stack;
import
java.util.StringTokenizer;
public
class
Solution
{
private
String calculateOperationSequence(
int
[]
originalArray,
int
[]
resultArray)
{
//
your code is here
StringBuffer
sb =
new
StringBuffer();
int
temp;
Stack<Integer>
stack =
new
Stack<Integer>();
stack.push(originalArray[
0
]);
sb.append(
"push"
+originalArray[
0
]+
"|"
);
int
index =
1
;
for
(
int
i =
0
;
i < resultArray.length; i++){
if
(stack.size()
>
0
){
temp
= stack.peek().intValue();
if
(temp
== resultArray[i]){
stack.pop();
sb.append(
"pop"
+temp);
if
(i
< resultArray.length-
1
)
sb.append(
"|"
);
continue
;
}
}
for
(;
index < originalArray.length && originalArray[index] != resultArray[i]; index++){
stack.push(originalArray[index]);
sb.append(
"push"
+originalArray[index]+
"|"
);
}
if
(index
< originalArray.length && originalArray[index] == resultArray[i]){
index++;
sb.append(
"push"
+resultArray[i]+
"|"
+
"pop"
+resultArray[i]);
if
(i
< resultArray.length-
1
)
sb.append(
"|"
);
}
}
if
(stack.size()
>
0
)
return
null
;
return
sb.toString();
}
public
static
void
main(String[] args)
{
Solution
solution =
new
Solution();
Scanner
scanner =
new
Scanner(System.in);
while
(scanner.hasNextLine())
{
String
strLine1 = scanner.nextLine();
StringTokenizer
stringTokenizer1 =
new
StringTokenizer(strLine1);
//Initialize
the original array
int
arrayLength = stringTokenizer1.countTokens();
int
[]
originalArray =
new
int
[arrayLength];
for
(
int
i =
0
;
i < arrayLength; i++)
{
originalArray[i]
= Integer.parseInt(stringTokenizer1.nextToken());
}
//Initialize
the result array
String
strLine2 = scanner.nextLine();
StringTokenizer
stringTokenizer2 =
new
StringTokenizer(strLine2);
arrayLength
= stringTokenizer2.countTokens();
int
[]
resultArray =
new
int
[arrayLength];
for
(
int
j =
0
;
j < arrayLength; j++)
{
resultArray[j]
= Integer.parseInt(stringTokenizer2.nextToken());
}
String
operationSequence = solution.calculateOperationSequence(originalArray, resultArray);
System.out.println(operationSequence);
}
}
}