当前位置: 代码迷 >> 综合 >> 1039. 最长连续公共子序列
  详细解决方案

1039. 最长连续公共子序列

热度:52   发布时间:2023-12-06 11:26:16.0

在这里插入图片描述
样例:
input:
aaa
aba
output:
1

思路:
dp的题还是太不熟悉了,一开始就是用寻找字串的办法拿了个六七十分,当然没办法改对。
然后考虑到这道题是dp经典题,所以参考了一下别人的思路:
拿个二维数组cnt[i][j]记录a[i]和b[j]是否相等,同时检测上一位是否相等
。数组的初始值均为0。
状态转移方程:cnt[i][j]=cnt[i-1][j-1]+1
需要注意的时,这道题给的数组比较大,如果开这么大的二位数组就会爆栈,所以采用滚动数组。
代码:

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int maxn=55555;
int maxx=0;
char a[maxn],b[maxn];
int cnt[maxn];
int main()
{
    cin>>a>>b;int la=strlen(a),lb=strlen(b);for(int i=0;i<la;i++){
    for (int j=lb-1;j>=0;j--){
    if(a[i]==b[j]){
    if (j==0) cnt[j]=1;else cnt[j]=cnt[j-1]+1;maxx=max(maxx,cnt[j]);} else cnt[j]=0;}}cout<<maxx<<endl;return 0;
}