这个题其实和 -出栈序列的合法性- 这个题类似,他们俩个用的都是同一个方法
#include<bits/stdc++.h>
using namespace std;
int main()
{ //总共三种操作,1--从1号轨道到2号轨道
//2--从1号轨道到3号轨道
//3--从3号轨道到2号轨道
stack<char>sta; //存字符
char s1[50],s2[50];
vector<int>vec;
scanf("%s%s",s1,s2);
int pos1=0,pos2=0; //分别标记s1和s2
int len=strlen(s1);
while(1)
{ // 如果字符相等则直接从1号轨道到2号轨道
if(s1[pos1]==s2[pos2]&&pos1<len&&pos2<len)
{
vec.push_back(1);
pos1++;
pos2++;
}
else if(!sta.empty()&&s2[pos2]==sta.top())
{ //如果和栈顶相等,那么就从3号轨道到2号轨道
sta.pop();
vec.push_back(3);
pos2++;
}
else
{ //否则就加入到栈,代表从1号轨道移动到3号轨道
if(pos1>=len)break;
sta.push(s1[pos1++]);
vec.push_back(2);
}
}
if(sta.empty())
{
for(int i=0; i<vec.size(); i++)
{
if(vec[i]==1)
{
printf("1->2\n");
}
else if(vec[i]==2)
{
printf("1->3\n");
}
else if(vec[i]==3)
{
printf("3->2\n");
}
}
}
else
{
printf("Are you kidding me?\n");
}
return 0;
}