为什么我会得TLE



问题:我在这个LEETCODE问题中得到了一个TLE,即寻找最长的公共子序列。通过了42/45个测试用例。请帮忙。您可以复制以下关于LEETCODE 1143问题的代码,并在可能的情况下提供帮助:

//求解(i,j(->分别表示字符串text1和text2中直到索引i和j的LCS的长度。

int solve(string text1, string text2,int i,int j,int dp[1001][1001]){
//base case
if(i<0||j<0){
return 0 ;
}
if(dp[i][j]!=-1) {
return dp[i][j];
}
else{
if(text1[i]==text2[j]){
return dp[i][j] = 1+ solve(text1,text2,i-1,j-1,dp) ;                                
}

else{
return dp[i][j] = max(solve(text1,text2,i,j-1,dp),solve(text1,text2,i-1,j,dp));
}
}
}
int longestCommonSubsequence(string text1, string text2) {
int m=text1.size();
int n=text2.size();

int dp[1001][1001];
memset(dp,-1,sizeof(dp));

return solve(text1,text2,m-1,n-1,dp);
}

TLE的原因是solve递归效率不高。递归发生两次(此处:max(solve(text1,text2,i,j-1,dp),solve(text1,text2,i-1,j,dp))(。试着找到一个更有效的算法。

我只会遍历矩阵,而不是递归,只是不按行或列,而是按对角线。

较小的改进是通过引用传递字符串(因此string&而不仅仅是string(。

相关内容

  • 没有找到相关文章

最新更新