gpt4 book ai didi

algorithm - 最长公共(public)子串的 DP 内存方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:59:07 25 4
gpt4 key购买 nike

谁能提供两个字符串之间最长公共(public)子串的内存方法。我知道底部解决方案,但我无法以自上而下的方式思考。期望时间复杂度-O(n^2)

最佳答案

自上而下的方法

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

string X, Y; //input strings
int ans, dp[105][105]; // ans : answer

int LCS(int n, int m) //our function return value of (n,m) state
{ // so that we can use the result in (n+1,m+1) state
if(n == 0 || m == 0) return 0; //in case of match in (n+1,m+1) state
if(dp[n][m] != -1) return dp[n][m];

LCS(n-1,m); //to visit all n*m states (try example: X:ASDF
LCS(n,m-1); // we call these states first Y:ASDFF)

if(X[n-1] == Y[m-1])
{

dp[n][m] = LCS(n-1,m-1) + 1;
ans = max(ans, dp[n][m]);
return dp[n][m];
}
return dp[n][m] = 0;
}

int main()
{
int t; cin>>t;
while(t--)
{
int n, m; cin>>n>>m; //length of strings
cin>>X>>Y;
memset(dp, -1, sizeof dp);
ans = 0;
LCS(n, m);
cout<<ans<<'\n';
}
return 0;
}

关于algorithm - 最长公共(public)子串的 DP 内存方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30859547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com