思路:
利用队列 + 栈实现
队列:手中的牌
栈:打出去的牌
代码实现:
//拉马车
public class Main2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String A = scanner.next();
String B = scanner.next();
// 队列 --- 手中的牌
Queue<Character> a = new LinkedList<>();
Queue<Character> b = new LinkedList<>();
for (int i = 0; i < A.length(); i++) { //赋值
a.offer(A.charAt(i));
}
for (int i = 0; i < B.length(); i++) {
b.offer(B.charAt(i));
}
// 栈 --- 打出去的牌
Stack<Character> stack = new Stack<>();
//纪录赢家:flag == 2,b赢了;flag == -1,a赢了
int flag = 0;
int index = 1;
while (index < 100000) {
// i是奇数就是A出牌
if (index % 2 != 0 && a.size() != 0) {
// 移除队列头元素 == 手中牌的最上面那张
char paia = a.poll();
// 判读栈是否有这个牌
if (stack.contains(paia)) {
// 有这张牌也打出,然后while收走,添加到队列a中
stack.add(paia);
// 如果包含牌,那一直循环,移除栈顶元素添加到队列a,相当于把包含的那些牌添加到了a队列中
while (stack.contains(paia)) {
a.offer(stack.pop());
}
// 赢了继续出牌
continue;
} else { // 没有这个牌也要打出来,并添加到栈中
stack.add(paia);
}
if (a.size() == 0) {
flag = 2;//假设flag =2表示a的牌出完了,就是b赢了
break;
}
//B出牌
} else if (index % 2 == 0 && b.size() != 0) {
char paib = b.poll();
// 如果存在出的牌,那么就能收牌;
if (stack.contains(b)) {
stack.add(paib);
while (stack.contains(paib)) {
b.offer(stack.pop());
}
// 赢了继续出牌
continue;
} else {
stack.add(paib);
}
// 查看是否打完
if (b.size() == 0) {
flag = 1;// 假设flag =1表示b的牌出完了,就是a赢了
break;
}
}
index++;
}
//判断赢家
if (flag == 0) {// 没有赢家
System.out.println("-1");
} else if (flag == 1) {// a赢了,输出a的牌
while (a.size() != 0) {
System.out.print(a.poll());
}
} else if (flag == 2) {// b赢了 ,输出b的牌
while (b.size() != 0) {
System.out.print(b.poll());
}
}
}
}