输入输出样例
示例
输入
96J5A898QA
6278A7Q973
输出
2J9A7QA6Q6889977
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
主要是模拟栈跟队列的使用,题目不难,但要注意几个点:
1. 赢牌的一方并不能把桌上的牌都赢走,而是拿走相同牌点及其中间的部分。但无论如何,都是赢牌的一方继续出牌,有的时候刚一出牌又赢了,也是允许的。
2.队列如何转字符串输出------创建了一个StringBuilder
对象sb
。如果名为quen1
的对象为空(假设quen1
可能是一个集合之类的数据结构),则遍历quen2
中的每个字符(假设quen2
是一个包含字符的集合或可迭代对象),并将每个字符添加到StringBuilder
中。最后,打印出拼接后的结果。
主要操作:队列,栈,模拟,队列转字符形式拼接输出,栈区域元素拼接到队列的队尾
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;
public class Main {
//因为想在函数中把栈元素弹出,所以栈在主函数外面创建,不然栈里面的元素变不了
static Stack<Character> stack = new Stack<>();
public static void main(String[] args) {
final Scanner scan = new Scanner(System.in);
//队列
final Queue<Character> quen1 = new LinkedList<>();
final Queue<Character> quen2 = new LinkedList<>();
String s1=scan.nextLine();
String s2=scan.nextLine();
//字符串元素加入队列中,满足先入先出
for(int i=0;i<s1.length();i++){
quen1.add(s1.charAt(i));
}
for(int i=0;i<s2.length();i++){
quen2.add(s2.charAt(i));
}
//h的作用是让赢的那边先出,1代表队列1,2代表队列2
int h=1;
while(!quen1.isEmpty()&&!quen2.isEmpty())
{
if(h==1&&pand(stack,quen1.peek())){
char p=quen1.remove();
stack.add(p);
jia(stack,quen1);
h=1;
}
else if(h==2&&pand(stack,quen2.peek())){
char p=quen2.remove();
stack.add(p);
jia(stack,quen2);
h=2;
}
else if(h==1&&!pand(stack,quen1.peek())){
char p=quen1.remove();
stack.add(p);
h=2;
}else if(h==2&&!pand(stack,quen2.peek())){
char p=quen2.remove();
stack.add(p);
h=1;
}
}
//创建了一个StringBuilder对象sb,遍历集合类(这里是队列结构)的数据结构,输出每个字符
final StringBuilder sb = new StringBuilder();
if(quen1.isEmpty()){
for(Character c:quen2){
sb.append(c);
}
System.out.println(sb);
}else {
for(Character c:quen1){
sb.append(c);
}
System.out.println(sb);
}
}
//判断字符元素是否与栈顶元素相同,相同返回true
public static Boolean pand(Stack stack,char n){
if(stack.isEmpty()){
return false;
}
for(int i=0;i<stack.size();i++){
if(stack.get(i).equals(n)){
return true;
}
}
return false;
}
//把相同牌点及其中间的部分拼接到队列中
public static Queue jia(Stack stack,Queue queue){
//m控制区间
int m=0;
char s= (char) stack.peek();
while (m!=2){
char a= (char) stack.peek();
if(a==s){
m++;
}
queue.add(a);
stack.pop();
}
return queue;
}
}