数据结构-Anagrams by Stack

                                                                      Anagrams by Stack

--------------题目大意-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

       题目有多个测试数据,两行的数据为一组,读入两个字符串s1,s2,题目问的是s1如何通过栈的push和pop操作得到字符串s2,输出所有的进栈出栈方法,进栈       用'i'表示,出栈用’o'表示。例如:

Sample Input

madam
adamm
bahama bahama
long short
eric rice

Sample Output

[
i i i i o o o i o o 
i i i i o o o o i o 
i i o i o i o i o o 
i i o i o i o o i o 
]
[ i o i i i o o i i o o o i o i i i o o o i o i o i o i o i o i i i o o o i o i o i o i o i o i o ]
[ ]
[ i i o i o i o o ]
---------题解思路--------------------------------------------------------------------------------------------------------------------------------------------

简单说一下我的思路,方法可能不是很好
我用的是搜索的方法,两个指针p1,p2分别指向s1,s2,以及一个指针p指向栈stack[]的顶,接下来分为两种情况

当s1[p1]!=s2[p2] 只能进栈---搜索(p1+1,p2,p+1)
当s1[p1]==s2[p2] 可以直接出栈---搜索(p1,p2+1,p-1)
也可以接着进栈---搜索(p1+1,p2,p+1)

边界条件 p2==Lenth(s2) 表示完成,直接输出方案
剪枝条件 p==Lenth(s1)-1&&stack[p]!=s2[p2] 表示栈已满,但栈顶元素不等于出栈元素

---------鄙人代码--------------------------------------------------------------------------------------------------------------------------------------------

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char s1[100],s2[100],st[100],s[200];
int l,i=0;
void go(char st[],int p1,int p2,int p);
int main()
{
    while(scanf("%s",s1)!=EOF)
    {
        scanf("%s",s2);
        st[0]=s1[0];
        l=strlen(s1);
        s[0]='i';
        printf("[\n");
        go(st,0,0,0);
        printf("]\n");
    }
    return 0;
}

void go(char st[],int p1,int p2,int p)
{
      if(p==l-1&&st[p]!=s2[p2]) 
      {
          return;
      }
      if(p2==l) 
      {
          int j=0;
          for(j=0;j<=i;j++)
          printf("%c ",s[j]);
          printf("\n");
          return;
      }
      if(st[p]!=s2[p2])
        {
            if(p1<l-1)
            {
              st[p+1]=s1[p1+1];
              i++;s[i]='i';
              go(st,p1+1,p2,p+1);
              i--;
            }
        }
      else
      if(st[p]==s2[p2])
      {
          if(p1<l-1)
          {
          st[p+1]=s1[p1+1];
          i++;s[i]='i';
          go(st,p1+1,p2,p+1);
          i--;
          }
          i++;s[i]='o';
          go(st,p1,p2+1,p-1);
          i--;  
      }
}

 











posted on 2012-05-27 22:19  Runtime Error  阅读(139)  评论(0)    收藏  举报