最长公共字串:
#include <iostream>
#include <string.h>
using namespace std;
int LCS(const char *str1, int len1, const char *str2, int len2, char *&lcs)
{
if(str1 == NULL || str2 == NULL)
return -1;
int *c = new int [len2];//最长字串记录向量
int max_len = 0; //最长公共字串的长度
char end = 0; //最长公共字串最后的位置
for(int i = 0; i < len2; ++i)
{
c[i] = 0;
}
for(int i = 0; i < len1; ++i)
{
for(int j = len2-1; j >=0; --j)
{
if(str1[i] == str2[j])
{
c[j] = c[j-1] + 1;
if(c[j] > max_len) //更新max_len, end
{
max_len = c[j];
end = j;
}
}
else
{
c[j] = 0;
}
}
}
//得到公共字串
if(max_len > 0)
{
lcs = new char [max_len + 1];
for(int i = 0; i < max_len; ++i) lcs[i] = str2[end - max_len + i + 1];
lcs[max_len] = 0;
}
delete [] c;
return max_len;
}
int main()
{
char str1[] = "abcdefg";
char str2[] = "zabczzcdefzzz";
char *lcs = 0;
int max = LCS(str1, strlen(str1), str2, strlen(str2), lcs);
cout << max << endl;
if(lcs)
cout << lcs << endl;
}