提问人:sandeep gaur 提问时间:6/21/2022 最后编辑:Ted Lyngmosandeep gaur 更新时间:6/21/2022 访问量:44
通过引用传递的字符串工作正常,否则不在 LCS 问题中
string passing by reference working fine else not in LCS problem
问:
如果我在函数方法中传递字符串引用,那么它工作正常,但如果我不通过引用传递它,那么测试用例就会失败,超过时间限制。 谁能告诉我我错过了什么?
工作代号:
class Solution {
public:
int lcsUtil(string& s1,int ind1,string& s2,int ind2,vector< vector<int>>&dp){
if(ind1<0 || ind2<0) return 0;
if(dp[ind1][ind2] != -1) return dp[ind1][ind2];
if(s1[ind1] == s2[ind2])
return dp[ind1][ind2] = 1 + lcsUtil(s1,ind1-1,s2,ind2-1,dp);
else
return dp[ind1][ind2] = 0 + max(lcsUtil(s1,ind1-1,s2,ind2,dp),lcsUtil(s1,ind1,s2,ind2-1,dp));
}
int longestCommonSubsequence(string text1, string text2) {
vector< vector<int> > dp (text1.size(),vector<int>(text2.size(),-1));
return lcsUtil(text1,text1.size()-1,text2,text2.size()-1,dp);
}
};
不工作代码:
class Solution {
public:
int lcsUtil(string s1,int ind1,string s2,int ind2,vector< vector<int>>&dp){
if(ind1<0 || ind2<0) return 0;
if(dp[ind1][ind2] != -1) return dp[ind1][ind2];
if(s1[ind1] == s2[ind2])
return dp[ind1][ind2] = 1 + lcsUtil(s1,ind1-1,s2,ind2-1,dp);
else
return dp[ind1][ind2] = 0 + max(lcsUtil(s1,ind1-1,s2,ind2,dp),lcsUtil(s1,ind1,s2,ind2-1,dp));
}
int longestCommonSubsequence(string text1, string text2) {
vector< vector<int> > dp (text1.size(),vector<int>(text2.size(),-1));
return lcsUtil(text1,text1.size()-1,text2,text2.size()-1,dp);
}
};
问题陈述
答:
2赞
Ted Lyngmo
6/21/2022
#1
当你按值传递 s 时,就像你在第二个例子中所做的那样,你每次都会复制它们。这需要时间(和内存)并解释超出的限制。您也可能因超出内存限制而失败。通过引用传递它们时,不会创建字符串的副本。请改为引用已存在的字符串。std::string
评论
const string&
std::string
string
malloc
free