题意:模拟栈,试问使用2个栈,能否使得串1变为串2
思路:模拟,经典问题,注意只要相同的元素放到栈顶后就不会再移动了,只需要考虑剩下的元素,因此每次只考虑一个元素的进入方式。
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
int n,pd[];
char s1[],s2[],s3[];
int main(){
while (scanf("%d %s %s",&n,s1,s2)!=EOF){
int t1=,t2=,i=,cnt=;s3[i]=s1[];pd[]=;
while (t1<n&&t2<n){
if (s3[i]==s2[t2]){
i--;cnt++;pd[cnt]=;t2++;
}else{
s3[++i]=s1[++t1];cnt++;pd[cnt]=;
}
}
if (i==){
printf("Yes.\n");
for (int i=;i<=cnt;i++)
if (pd[i]==) printf("out\n");else printf("in\n");
}else printf("No.\n");
printf("FINISH\n");
}
}