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

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 ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值