题意:利用堆栈操作,将第一个单词转换成第二个单词 ,i代表入栈,o代表出栈,输出所有的可能,并且要按字典序排序。
dfs模拟堆栈的操作。。。
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
string a,b;
//pos源单词的位置,deep目标单词的位置,pop模拟出栈过程,push模拟入栈过程
void dfs(int pos,int deep, string operat,string push,string pop){
int i;
for(i=0;i<=pos-deep;i++)
operat+="i ";
operat+="o ";
push+=pop[pos];
pop.erase(pos,1);//删除从pos开始的1(n)个字符
if(pop.size()==0)
cout<<operat<<endl;
else{
//在pop中查找下一个要操作的位置
for(i=pop.size()-1;i>=pos;i--){
if(pop[i]==b[push.size()])
dfs(i,pos,operat,push,pop);
}
//要操作的字符就在当前位置的前面
if(pos>0 && pop[pos-1]==b[push.size()]){
dfs(pos-1,pos,operat,push,pop);
}
}
}
int main(){
int i;
while(cin>>a>>b){
puts("[");
//模拟构造目标字符串
for(i=a.size()-1;i>=0;i--){//这样的原因是为了满足字符串的顺序
if(a[i]==b[0])
dfs(i,0,"","",a);
}
puts("]");
}
}