连接次序问题

问题描述: 输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序。即输出125,126,145,146。

该题是程序员面试宝典关于递归问题的一个题,初看比较简单,不就是建立一个strlen(“abc”)层的多叉树嘛,然后从上到下,从左到右输出即可,可是在编写程序的过程中却遇到了问题,始终把书上给的递归过程想不明白,于是就自己动手写了个程序。

 1 #include <iostream>   
 2 #include<string.h>   
 3 #include<list>   
 4 using namespace std;  
 5 
 6 list<int>list1;  
 7 
 8 void findLink(const char *p1, const char *p2, int i, int j)  
 9 {  
10     if(!p1[i] || !p2[j])  
11         return ;  
12     if(p2[j] == p1[i] && !p2[j + 1])  
13     {  
14         for(list<int>::iterator it = list1.begin(); it != list1.end(); it++)  
15         {  
16             cout << *it << " ";  
17         }  
18         cout << i + 1 << endl;  
19     }  
20     if(p1[i] == p2[j])  
21     {  
22         list1.push_back(i + 1);  
23         findLink(p1, p2, i + 1, j + 1);  
24         list1.pop_back();  
25     }  
26     findLink(p1, p2, i + 1, j);    
27 }  
28 int main() 
29 {  
30     char p[10] = "abdbccd";  
31     char q[10] = "abc";  
32     findLink(p, q, 0, 0);  
33     return 0;  
34 }  

书上的:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 
 5 using namespace std;
 6 
 7 void PrintfArray(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)
 8 {
 9     int pStartNum = p_start_num;
10     int sStartNum = s_start_num;
11     int printNum = print_arr_num;
12     if(printNum == s_len)
13     {
14         for(int i = 0; i < s_len; i++)
15         {
16             cout << *(print_arr + i);
17             cout << " ";
18         }
19         cout << endl;
20         return;
21     }
22     
23     for(int i = pStartNum; i < p_len; i++)
24     {
25         for(int j = sStartNum; j < s_len; j++)
26         {
27             if(*(p_str + i) == *(s_str + j))
28             {
29                 print_arr[printNum] = i + 1;
30                 pStartNum = i;
31                 sStartNum = j;
32                 PrintfArray(p_str, s_str, print_arr, p_len, s_len, printNum + 1, pStartNum + 1, sStartNum + 1);
33             }
34         }
35     }
36 }
37 
38 void ConnectSequence(char *p_str, char *s_str)
39 {
40     int p_len = strlen(p_str);
41     int s_len = strlen(s_str);
42     int *print_arr = new int[s_len];
43     unsigned int print_arr_num = 0;
44     
45     if(NULL == p_str && NULL == s_str)
46     {
47         cout << "string error"<< endl;
48         return;
49     }
50     if(NULL == print_arr)
51     {
52         cout << "allocate memory error" << endl;
53         return;
54     }
55     PrintfArray(p_str, s_str, print_arr, p_len, s_len, 0, 0, 0);
56 }
57 
58 int main()
59 {
60     char ParString[] = "abdbcc";
61     char SonString[] = "abc";
62     ConnectSequence(ParString, SonString);
63     return 0;
64 }

本人觉得这段代码的可读性不好  

你可能感兴趣的:(连接)