回朔法与动态规划编程题思考
来源:互联网 发布:淘宝抢购 加入购物车 编辑:程序博客网 时间:2024/06/06 14:05
leetcode.com:Distinct Subsequences
回朔法:
class Solution {
public:
int numDistinct(string S, string T) {
if(S.size()<1 && T.size()<1)
return 0;
int i,j,k=0;
map<char,int >mmap;
int len0=S.size(),len1=T.size();
int cnt=1;
int buf0[len0],buf1[len1];
vector<int >v;
for(i=0;i<len1;++i)
{
if(mmap.find(T[i])==mmap.end())
{
mmap[T[i]]=cnt;
buf1[i]=cnt++;
}
else
buf1[i]=mmap[T[i]];
}
for(i=0;i<len0;++i)
{
if(mmap.find(S[i])==mmap.end())
{
buf0[i]=0;
}
else
buf0[i]=mmap[S[i]];
}
i=0;
while(buf0[i]!=1)
++i;
j=len0-1;
while(j>=0 && buf0[j]!=cnt-1)
--j;
for(;i<=j;++i)
{
if(buf0[i]>=1 && buf0[i]<cnt)
{
v.push_back(buf0[i]);
}
}
backtrace(v,buf1,v.size(),len1,0,0,k);
return k;
}
void backtrace(const vector<int >&vs,int vt[],int len0,int len1,int ind0,int ind1,int &cnt)
{
if(ind1>=len1)
{
++cnt;
return;
}
if(ind0>=len0)
return;
if(vs[ind0]==vt[ind1])
{
backtrace(vs,vt,len0,len1,ind0+1,ind1+1,cnt);
backtrace(vs,vt,len0,len1,ind0+1,ind1,cnt);
}
else
{
backtrace(vs,vt,len0,len1,ind0+1,ind1,cnt);
}
}
};
- 回朔法与动态规划编程题思考
- 回朔法与动态规划的思考
- 动态规划总结与思考
- 动态规划思考1
- 动态规划思考2
- 动态规划思考3
- CODER-动态规划编程题
- 动态规划与贪心算法区别以及如何思考动态规划
- 动态规划的一些思考
- 动态规划 hdu2955 思考过程
- [编程题]滑雪 Java版 动态规划
- 【编程】【动态规划】
- SDAU 编程练习三 动态规划和动态规划与背包问题相结合的问题
- 动态规划思考集合,陆续更新
- 动态规划的思考(1)
- 动态规划的思考(2)
- 动态规划的思考(三)
- 对动态规划问题的一些思考
- OC中的字符串
- Java switch 语句使用 String 参数
- 概率论与数理统计(1)
- 约瑟夫环之二
- 小试牛刀爬北邮人论坛十大
- 回朔法与动态规划编程题思考
- 把安卓手机当作短信猫的三款ANDROID应用
- vim分屏
- 10个微妙的Java编码最佳实践
- 分治 棋盘覆盖 超级好理解的一种写法!
- linux安装JDK
- OC学习笔记:NSString的用法
- JVM学习一:学习java内存区域
- 黑马程序员——Java学习日记(六)异常、包