两字符串的最长公共子串问题

来源:互联网 发布:ubuntu安装后的15件事 编辑:程序博客网 时间:2024/06/07 05:20

某影音笔试题,说实话,这种题网上非常普遍,但笔试时候能完整无差错写出来的,只能呵呵了...

 

闲着做这题,整理了下,把这个程序贴上来吧。仅供参考,效率就不说了。

 

思路:遍历字符串,然后记录最长的子串。

 

代码如下:

/* 求公共最长子串 */typedef struct recode{int len;char *str;}ReNode;int Compare(char *strA, char *strB){int len = 0;while(*strA++ == *strB++){len++;}return len;}void ComString(char *strA, char *strB, char *comstr){int i, j;int lenA = 0, lenB = 0;int templen = 0;ReNode RecodeNode, TempNode;//入参检查memset(&TempNode, 0, sizeof(TempNode));memset(&RecodeNode, 0, sizeof(RecodeNode));lenA = strlen(strA);lenB = strlen(strB);for (i = 0; i <= lenA; i++){for (j = 0; j <= lenB; j++){if (strA[i] == strB[j]){templen = Compare(&strA[i], &strB[j]);TempNode.len = templen;TempNode.str = &strB[j];}    if (TempNode.len > RecodeNode.len){RecodeNode.len = TempNode.len;RecodeNode.str = TempNode.str;}}}strncpy(comstr, RecodeNode.str, RecodeNode.len);//就是表达拷贝意思,此处有拷贝越界风险}