美文网首页
c语言求最长公共子串长度

c语言求最长公共子串长度

作者: 一路向后 | 来源:发表于2021-04-04 22:00 被阅读0次

    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
    

    相关文章

      网友评论

          本文标题:c语言求最长公共子串长度

          本文链接:https://www.haomeiwen.com/subject/xofrkltx.html