今天看面试宝典,发现8.2面试例题1有误,所以自己又写了个小程序测试了一下是对的了。
题目:输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接顺序。即输出125,126,145,146。
void print(char *p,char *s,int *print_arr,int p_len,int s_len,int print_num,int p_start_num,int s_start_num)
{
int pStartNum = p_start_num;
int sStartNum = s_start_num;
int printNum = print_num;
if (printNum == s_len)
{
for(int i = 0 ; i < s_len;i++)
{
cout << *(print_arr+i);
cout << " ";
}
cout << endl;
return;
}
for(int i = pStartNum;i < p_len;i++)
{
if(*(p+i) == *(s+s_start_num))
{
print_arr[print_num] = i+1;
print(p,s,print_arr,p_len,s_len,print_num+1,i+1,sStartNum+1);//其实是利用深度回溯的思想来构建一个完整的序列。
}
}
}
void connect(char *p,char *s)
{
int p_len = strlen(p);
int s_len = strlen(s);
int *print_arr = new int[s_len];
print(p,s,print_arr,p_len,s_len,0,0,0);
}//这里省略了检查p,s的输入是否合法的部分
int main()
{
char p[] = "abdbcca";
char s[] = "abc";
connect(p,s);
return 0;
}