代码改变世界

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;
}