#include "stdafx.h"
#include <string.h>
// 思路:
// 依次找到一个父位置,
// 1: 到叶子结点时,找到多个位置
// 返回上一层父结点位置如果又找一个相同位置,执行1:,否则返回到该结点的父结点。
// 输入2个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序。即输出125,126,145,146.
void PrintArray(char*p_str,char*s_str,int*print_arr,int p_len,int s_len,int print_arr_num,int p_start_num,int s_start_num)
{
int pStartNum=p_start_num,sStartNum=s_start_num;
int printNum=print_arr_num;
if (printNum==s_len)
{
for (int i= 0;i<s_len;i++)
{
printf("%d\t",*(print_arr+i));
}
printf("\n");
return;
}
for(int i=pStartNum;i<p_len;i++)
{
for (int j=sStartNum;j<s_len;j++)
{
if (*(p_str+i)==*(s_str+j))
{
print_arr[printNum]=i+1;
pStartNum=i;
sStartNum=j;
PrintArray(p_str,s_str,print_arr,p_len,s_len,printNum+1,pStartNum+1,sStartNum+1);
}
}
}
}
void ConnectSequence(char *p_str,char*s_str)
{
int p_len=strlen(p_str);
int s_len = strlen(s_str);
int *print_arr = new int[s_len];
unsigned int print_arr_num=0;
if (NULL==p_str&&NULL==s_str)
{
printf("string error");
return;
}
if (NULL==print_arr)
{
printf("allocate error");
return;
}
PrintArray(p_str,s_str,print_arr,p_len,s_len,0,0,0);
}
int _tmain(int argc, _TCHAR* argv[])
{
char parstring[]="aabdbcca";// "abdbc"
char sonstring[]="abc";
ConnectSequence(parstring,sonstring);
return 0;
}