1.解题思路
将两个字符串组成二维数组,相同的值为1,不同的值为0,同时在对角线上叠加,矩阵中的最大值则为最长公共子串长度.
2.源码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
int func(char *a, int n, char *b, int m)
{
int **c = (int **)malloc(n*sizeof(int *));
int s = 0;
int t = -1;
int i, j;
for(i=0; i<n; i++)
{
c[i] = (int *)malloc(m*sizeof(int));
}
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(a[i] == b[j])
{
c[i][j] = 1;
if(i && j)
{
c[i][j] += c[i-1][j-1];
}
}
else
{
c[i][j] = 0;
}
}
}
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(c[i][j] > s)
{
s = c[i][j];
t = i;
}
}
}
for(i=0; i<n; i++)
{
free(c[i]);
c[i] = NULL;
}
free(c);
c = NULL;
return s;
}
int main()
{
char a[1024];
char b[1024];
int m;
int n;
int z;
scanf("%s", a);
scanf("%s", b);
n = strlen(a);
m = strlen(b);
if(n >= m)
{
z = func(a, n, b, m);
}
else
{
z = func(b, m, a, n);
}
printf("%d\n", z);
return 0;
}
########3.编译源码
$ gcc -o example examle.c -std=c89
4.运行及其结果
$ ./example
hello
dwedohell
4
网友评论