您的位置:首页 > 编程语言 > C语言/C++

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

2016-10-05 15:26 621 查看
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;
}
else
cout<<"no sub"<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++