求两个字符串的最长公共连续子序列的长度

来源:互联网 发布:平面设计好还是美工好 编辑:程序博客网 时间:2024/06/07 19:08

2017年校招全国统一模拟笔试(第二场)编程题集合的一道题,求两个字符串的最长公共连续子序列的长度

题目地址第一题

下面是c++代码

#include <bits/stdc++.h>#define ll long long#define inf 0x3f3f3f3f#define mem(a,b) memset(a,b,sizeof(a))using namespace std;int m[100][100];int main(){//freopen("1.txt","r",stdin);    int i,j,k1,k2,n,ans=0,max;    string s1,s2;    getline(cin,s1);    getline(cin,s2);    k1=s1.size();    k2=s2.size();    mem(m,0);    for(i=0;i<k1;i++)        for(j=0;j<k2;j++)            if(s1[i]==s2[j])m[i][j]=1;    for(i=0;i<k1;i++){        max=0;        for(j=0;j<k2;j++){            if(m[i+j][j]==1)max++;            else max=0;            if(max>ans)ans=max;        }    }//统计从左边第一列开始的斜向右下斜线的最大值    for(i=0;i<k2;i++){        max=0;        for(j=0;j<k1;j++){            if(m[j][i+j]==1)max++;            else max=0;            if(max>ans)ans=max;        }    }//统计从顶部第一行开始的斜向右下斜线的最大值    printf("%d\n",ans);    /*    for(i=0;i<k1;i++){        for(j=0;j<k2;j++)            printf("%d ",m[i][j]);        printf("\n");    }    */    return 0;}

大体思路

假设两个字符串str1和str2,长度分别为m和n,则构建一个m*n的矩阵matrix,

   matrix[i][j]==1表示字符串str1中第i个字符与str2中第j个字符相等,为0则不相等。   统计矩阵matrix中每条斜线上1的连续最大个数就是str1和str2中公共连续子串的最大长度

例如:str1: abcde str2: abgde
斜线上连续的1的最大个数为2,所以最长公共连续子串长度为2

  matrix = [ 1  0  0  0  0              0  1  0  0  0             0  0  0  0  0             0  0  0  1  0             0  0  0  0  1 ]

阅读全文
0 0
原创粉丝点击