ZJU_1004Anagrams by Stack
2015-05-15 21:55 HaodongGUO 阅读(101) 评论(0) 编辑 收藏 举报#include<iostream> using namespace std; string a,b; void Anagrams(int iPos,int iDeep,string operate,string pop,string push) { int i; for(i=0;i<=iPos-iDeep;i++) { operate+="i "; } operate +="o "; iDeep=iPos;//记录本次匹配成功的操作位置 push+=pop[iPos]; pop.erase(iPos,1); if(pop.size()==0)//如果栈为空则表示操作完成,pop中已经没有元素了 { cout<<operate<<endl; } else//否则判断操作位置的上方以及下方是否可以操作匹配 { for(i=pop.size()-1;i>=iPos;i--)//从pop的最上面的元素开始遍历判断和上次操作的位置的iPos比较看是否是在iPos的更上面 { if(pop[i]==b[push.size()]) { Anagrams(i,iDeep,operate,pop,push); } } if(iDeep>0)//发现pop中iPos下面的位置的元素个数不为0时 { if(pop[iPos-1] == b[push.size()])//使用递归 { Anagrams(iPos-1,iDeep,operate,pop,push); } } } } int main() { int i; while(cin>>a>>b) { cout<<"["<<endl; for(i=a.size()-1;i>=0;i--) { if(a[i]==b[0]) { Anagrams(i,0,"",a,"");//string可以传空的字符串 } } cout<<"]"<<endl; } return 0; }