求出2个字符串中的最大公共子串
2017-01-18 12:57
211 查看
给定字符串A和B,输出A和B中的最大公共子串。 比如A="aocdfe" B="pmcdfa" 则输出"cdf"
void commonstring(char *str1, char *str2, char *maxSubstr)
{
int i = 0, j = 0, k = 1, maxPos = -1, maxLen = 0;
if ((NULL == str1) || (NULL == str2) || (NULL == maxSubstr))
{
return NULL;
}
for (i=0; i < strlen(str1); i++)
{
for (j=0; j < strlen(str2); j++)
{
if (str1[i] == str2[j])
{
for (k=1; (str1[i+k] == str2[j+k]) && (str1[i+k]!='\0'); k++)
;
}
if (k > maxLen)
{
maxPos = i;
maxLen = k;
}
}
}
if (-1 == maxPos)
{
maxSubstr[0] = '\0';
}
else
{
memcpy(maxSubstr, str1+maxPos, maxLen);
maxSubstr[maxLen] = '\0';
}
}
void commonstring(char *str1, char *str2, char *maxSubstr)
{
int i = 0, j = 0, k = 1, maxPos = -1, maxLen = 0;
if ((NULL == str1) || (NULL == str2) || (NULL == maxSubstr))
{
return NULL;
}
for (i=0; i < strlen(str1); i++)
{
for (j=0; j < strlen(str2); j++)
{
if (str1[i] == str2[j])
{
for (k=1; (str1[i+k] == str2[j+k]) && (str1[i+k]!='\0'); k++)
;
}
if (k > maxLen)
{
maxPos = i;
maxLen = k;
}
}
}
if (-1 == maxPos)
{
maxSubstr[0] = '\0';
}
else
{
memcpy(maxSubstr, str1+maxPos, maxLen);
maxSubstr[maxLen] = '\0';
}
}
相关文章推荐
- 练习二 将字符串反转 练习三 获取关键字出现的次数 练习四 获取2个字符串中最大公共子串
- 两个或N个字符串最大公共子串算法
- 求两个字符串的最大公共子串
- 两个字符串的最大公共子串
- 求N个字符串的最大公共子串
- N个字符串的最大公共子串 (暴力解法)
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- 给定字符串A和B,输出A和B中的最大公共子串。
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离(链接)
- 求两个字符串的最大公共子串
- LCS求两个字符串的最大公共子串
- 找出两个字符串中最大的公共子串的简单实现
- 找出两个字符串的最大公共子串
- 找出两个字符串的最大公共子串
- 转:最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- 求两个字符串的公共最大子字符串,如asdfsdkgf,kllsdkabc的最大子串为sdk
- 求多个字符串的最大公共子串---后缀数组
- 求多个字符串的最大公共子串
- 求两字符串最大公共子串
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离