【发布时间】:2021-01-16 09:54:08
【问题描述】:
问题陈述是: 给定两个序列 A 和 B,计算序列 A 中唯一路的数量,以形成与序列 B 相同的子序列。 子序列:字符串的子序列是由原始字符串通过删除一些(可以是无)字符而不干扰剩余字符的相对位置而形成的新字符串。 (即,“ACE”是“ABCDE”的子序列,而“AEC”不是)。
目标: 我想使用 dp 优化我的递归解决方案
我的方法: 我正在尝试制作给定字符串的所有可能子序列,如果子序列与模式 ans 匹配,则为 ans=ans+1。
我想记住解决方案并使用 dp 来优化时间复杂度,但想不出该怎么做。
代码:
int funct(string &given,string &target,string &curr, int index)
{
if(curr == target)
{
return 1;
}
if( index >= given.size() )
return 0;
int without = funct(given,target,curr,index+1);
curr.push_back(given[index]);
int with = funct(given,target,curr,index+1);
curr.pop_back();
return with+without;
}
int Solution::numDistinct(string A, string B)
{
string s;
return funct(A,B,s,0);
}
【问题讨论】:
标签: recursion dynamic-programming