找出两个字符串中最大的公共子串的简单实现
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;
}
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;
}
相关文章推荐
- 找出两个字符串中最大的公共子串的简单实现
- 找出两个字符串中最大的公共子串(java实现)
- java实现字符串匹配问题之求两个字符串的最大公共子串
- java实现字符串匹配问题之求两个字符串的最大公共子串
- 编程实现查找两个字符串的最大公共子串 示例:"aocdfe"和"pmcdfa"最大公共子串为"cfd"
- 找出两个字符串的最大公共子串
- 【python】实例-python实现两个字符串中最大的公共子串
- 找出两个字符串的最大公共子串
- java实现字符串匹配求两个字符串的最大公共子串
- 135、编程实现:找出两个字符串中最大公共子字符串,如"abccade","dgcadde"的最大子串为 "cad"
- C++实现求两个字符串的最大公共子串
- LCS算法找出两个字符串最长公共子串(C#实现)
- 找出两个字符串的最大公共子串
- 找出两个字符串中最大公共子字符串,如"abccade","dgcadde"的最大子串为"cad"
- 找出两个字符串最长公共子串
- 求两个字符串的最大公共子串
- C语言实现寻找两个字符串中的最大公共字符串长度
- 找出两个字符串中最大子字符串,如"abractyeyt","dgdsaeactyey"的最大子串为"actyet
- (Relax 后缀数组1.4)POJ 2774 Long Long Message(求两个字符串公共子串的最大长度)
- Java语言实现查找两个字符串的最大公共字串