最长公共子串长度

这个题目应该不需要例题,但为了更好的“理解”。

题目描述

信息学小组截获了两个序列,序列AB,规定两个序列所隐藏的信息就是两者的最长公共子串

注意,这里的子串是指连续的,比如说212325233212212325233的子串,而213或者223都不是212325233的子串

现在,他们将这个任务交给你,你要找出这两个序列所隐藏信息的长度

输入格式

两行,A和B(A,B长度均不大于1000,A,B均由0~9之间的数字组成)

输出格式

一个整数为最长公共子串的长度

样例

样例输入

212325233 
312123223

样例输出

5



#include<bits/stdc++.h>
using namespace std;
int dp[2005][2005];//dp[i][j]表示串xi,yi的最长公共子串长度;
char a[2005],b[2005];


int main(){
    scanf("%s%s", a, b);
    for(int i=0;i<=strlen(a);i++){
        dp[i][0]=0;
    }
    for(int j=0;j<=strlen(b);j++){
        dp[0][j]=0;
    }//初始化
    for(int i=1;i<=strlen(a);i++){
        for(int j=1;j<=strlen(b);j++){
            if(a[i-1]==b[j-1]){
                dp[i][j]=dp[i-1][j-1]+1;
            } else {
                dp[i][j]=0;
            }
        }
    }//上图是最好的解释......
    int maxn=-1;
    for(int i=1;i<=strlen(a);i++){
        for(int j=1;j<=strlen(b);j++){
            maxn=max(maxn,dp[i][j]);
        }
    }//这就不用说了
    printf("%d",maxn);
    return 0;
}//


原文地址:https://www.cnblogs.com/LightyaChoo/p/12775763.html