给定两个字符串,输出其最长公共子串的长度。
ABACCB
AACCAB
3
最长公共子串是ACC,其长度为3。
最长公共子序列
的思路,可以使用两个指针变量,i
和j
来遍历a,b字符串。f[i][j]
代表着什么呢?因为本题是要连续的子串,因此我们的 f[i][j]
表示以a[i]
和b[j]
为结尾的公共子串的长度f[i][j]=f[i-1][j-1]+1
(a[i]==b[j]
)f[i][j]=0
)(a[i]!=b[j]
)f[0][j]=0
f[i][0]=0
f数组
即可。f[i][j]
的值如图所示。#include<iostream>
#include<cstring>
using namespace std;
char a[200]="BCCABCCB";
char b[200]="AACCAB";
int f[201][201];
int main(){
int ans=0;
for(int i=1; i<=strlen(a); i++){
for(int j=1; j<=strlen(b); j++){
if(a[i-1]==b[j-1]) f[i][j]=f[i-1][j-1]+1;
ans=max(ans,f[i][j]);
}
}
printf("ans=%d\n",ans);
return 0;
}