int GetMaxComSTR(const char *s, const char *t, int *length) { int i = 0; int j = 0; int k = 0; int tmp_len = 0; int condition = 0; int index = 0; *length = -1; while(i<strlen(s)) { j = 0; while(j<strlen(t)) { if (s[i] == t[j]) { k = 0; tmp_len = 0; condition = 1; while (condition == 1) { if (i+k<strlen(s) && j+k <strlen(t) && ——————————1——————————————) { tmp_len ++; k++; } else { —————————2——————————— } } if (————3————) { index = i; *length = tmp_len; } } ————————————4———————————— } ——————————5—————————— } return index; }
答案:
//从两个字符串中找最大字符串 int GetMaxComSTR(const char *s, const char *t, int *length) { int i = 0;//字符串1索引 int j = 0;//字符串2索引 int k = 0;//记录的最大公共字符串的长度 X int tmp_len = 0;//查找过程中记录暂时的公共字符串长度 int condition = 0;//是否具有公共字符串标识 int index = 0;//第一个存储位置 最大存储位置 *length = -1; while(i<strlen(s))//字符串1索引 { j = 0; while(j<strlen(t)) { if (s[i] == t[j])//这句精髓,可以避免进入循环后多次比较操作,加快效率 { k = 0; tmp_len = 0; condition = 1;//相同置1 while (condition == 1) { if (i+k<strlen(s) && j+k <strlen(t) && s[i+k] == t[j+k] /*k >= tmp_len*/)//1根据上面比较得到提示 { tmp_len ++; k++; } else { condition = 0;//2 此处使用break可以少一次条件判断循环 //break; } } if (tmp_len > *length)//3 { index = i; *length = tmp_len;//这个提示3处条件 } } j++; //不相等,j自增//4 循环结束,不必多说 } i++;//内层循环结束//5 } return index; }
面试总结:不要因为外界条件影响自己的思路,当你在很平坦的大路上行驶时,就算给你画一条很窄的路线,你也能够不偏不移的沿着路线通过,但是如果是同样窄或者更宽一点的桥,没有 围栏,你也会掉到水里。