这个题目应该不需要例题,但为了更好的“理解”。
题目描述
信息学小组截获了两个序列,序列A
和B
,规定两个序列所隐藏的信息就是两者的最长公共子串
注意,这里的子串是指连续的,比如说212325233
中212
是212325233
的子串,而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; }//