最长公共子串的长度

问题:给出两字字符串s1和s2,求这两个字符串最长的公共部分

 

代码:

1、

#include <stdio.h> #include <string.h> #include <assert.h> int lcs(const char *src, const char *sub) { assert(NULL != src && NULL != sub); int row, col; int len_max = 0; int len_src = strlen(src) + 1; int len_sub = strlen(sub) + 1; int f[len_src][len_sub]; bzero(f, len_src * len_sub * sizeof(int)); for(row = 1; row < len_src; row++) { for(col = 1; col < len_sub; col++) { if(src[row -1] == sub[col – 1]) { f[row][col] = f[row – 1][col – 1] + 1; len_max = f[row][col] > len_max ? f[row][col] : len_max; } } } return len_max; } int main(void) { char src[100]; char sub[100]; bzero(src, 100 * sizeof(char)); bzero(sub, 100 * sizeof(char)); printf(“src:”); scanf(“%s”, src); printf(“sub:”); scanf(“%s”, sub); printf(“len_max = %d/n”, lcs(src, sub)); return 0; }  

 

 

字符串”blog.csdn.net”和”csdn.blog”求公共子串时的输出结果   

 

String: 1. blog.csdn.net 2. csdn.blog c s d n . b l o g 0 0 0 0 0 0 0 0 0 0 b 0 0 0 0 0 0 1 0 0 0 l 0 0 0 0 0 0 0 2 0 0 o 0 0 0 0 0 0 0 0 3 0 g 0 0 0 0 0 0 0 0 0 4 . 0 0 0 0 0 1 0 0 0 0 c 0 1 0 0 0 0 0 0 0 0 s 0 0 2 0 0 0 0 0 0 0 d 0 0 0 3 0 0 0 0 0 0 n 0 0 0 0 4 0 0 0 0 0 . 0 0 0 0 0 5 0 0 0 0 n 0 0 0 0 1 0 0 0 0 0 e 0 0 0 0 0 0 0 0 0 0 t 0 0 0 0 0 0 0 0 0 0  

 

max substr length:5

 

 

 

参考:http://www.yuanma.org/data/2006/0723/article_1215.htm

 

点赞