import java.util.ArrayDeque; import java.util.Deque; import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner=new Scanner(System.in); int q=scanner.nextInt(); for (int i = 0; i < q; i++) { int n=scanner.nextInt(); int a[]=new int[n];//入栈序列 int b[]=new int[n];//出栈序列 Deque<Integer> stackDeque=new ArrayDeque<>(); for (int j = 0; j < a.length; j++) { a[j]=scanner.nextInt(); } for (int j = 0; j < b.length; j++) { b[j]=scanner.nextInt(); } int flag=0; for (int j = 0; j < b.length; j++) { stackDeque.push(a[j]); while(!stackDeque.isEmpty()&&stackDeque.peek()==b[flag]) { stackDeque.pop(); flag++; } } if(stackDeque.isEmpty()) { System.out.println("Yes"); }else { System.out.println("No"); } } } }
这道题其实不难,就是每一次将入栈序列的值压入栈中,然后对栈进行判断,如果栈非空并且栈顶元素等于出栈序列此时对应的元素,那我们就把栈顶元素出栈,就这样,当入栈序列元素全部入栈后,也就是循环结束后,如果栈为空,那么就是符合条件,若非空,那么就是不符合条件