找出两个字符串中最大的公共子串的简单实现

来源:互联网 发布:江南大学网络教育好吗? 编辑:程序博客网 时间:2024/06/01 12:25

Short =abcde

Long =123456


Abcde 

 

Abcde

 

Abcd

Bcde

 

Abc

Bcd

Cde

 

Ab

Bc

Cd

De

 

A

B

C


D

E

 

char * common_sub( char * str1,  char *str2){assert((str2 != NULL) && (str1 != NULL)); char * shortstr = NULL; char * longstr = NULL;if(strlen(str1) > strlen(str2)){longstr = str1;shortstr = str2;}else{longstr = str2;shortstr =str1 ;}/*if (strstr(longstr, shortstr) != NULL){return shortstr;}*/char * subStr = new char[strlen(shortstr)+1];memset(subStr,0,strlen(shortstr)+1);for (size_t i = strlen(shortstr); i >0 ; i--){for (size_t j = 0; j <= strlen(shortstr)- i ; j++){memcpy(subStr,&shortstr[j],i);subStr[i] = '\0';if(strstr(longstr,subStr) != NULL)return subStr;//注意内存没有进行释放}}return NULL;}int _tmain(int argc, _TCHAR* argv[]){char *pSub = NULL;pSub= common_sub("abcdef","de");if(pSub){cout<<pSub<<endl;delete pSub;pSub = NULL;}elsecout<<"no sub"<<endl;return 0;}


1 0
原创粉丝点击