gpt4 book ai didi

c++ - 最长公共(public)子串的递归求解错误

转载 作者:搜寻专家 更新时间:2023-10-31 00:53:35 24 4
gpt4 key购买 nike

问题:给定两个字符串‘X’和‘Y’,找出最长公共(public)子串的长度。
我的解决方案一直在运行,没有达到基本条件。我不明白这是为什么?

我看过 DP 解决方案,但在互联网上找不到满意的递归解决方案。

int lcs_calc(string str1, string str2, int i_1, int i_2, int lcs, int c_lcs)
{

if (i_1 >= str1.length() || i_2 >= str2.length())
{
//end. base cond
return lcs;
}
if (str1[i_1] == str2[i_2])
{
c_lcs++;
if (c_lcs > lcs) lcs = c_lcs;
return lcs_calc(str1, str2, ++i_1, ++i_2, lcs, c_lcs);
}
else
{
if (c_lcs == 0)
{
return max(lcs_calc(str1, str2, ++i_1, i_2, lcs, c_lcs), lcs_calc(str1, str2, i_1, ++i_2, lcs, c_lcs));
}
else
{
c_lcs = 0;
return max(lcs_calc(str1, str2, --i_1, i_2, lcs, c_lcs), lcs_calc(str1, str2, i_1, --i_2, lcs, c_lcs));
}


}
}



初始参数:

str1 = "AABC"
str2 = "ABCD"

i_1 = 0(第一个字符串的索引)
i_2 = 0(第二个字符串的索引)
c_lcs = 0 (当前公共(public)子串长度)
lcs = 0(最长公共(public)子串的长度)

最佳答案

return max(lcs_calc(str1, str2, ++i_1, i_2, lcs, c_lcs), lcs_calc(str1, str2, i_1, ++i_2, lcs, c_lcs));

在第一次调用中,只有 i_1 应该递增,在第二次调用中,只有 i_2 应该递增。因为你使用 ++,递增的 i_1 在两个调用中传递。您应该明白,一旦您在第一次调用中执行了 ++i_1,在第二次调用 lcs_calc() 时,i_1 将作为增量值传递这也不是你想要的。

另外你不需要其他情况。

else
{
return max(lcs_calc(str1, str2, i_1+1, i_2, lcs, c_lcs), lcs_calc(str1, str2, i_1, i_2+1, lcs, c_lcs));
}

关于c++ - 最长公共(public)子串的递归求解错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48258718/

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