回朔法与动态规划编程题思考

来源:互联网 发布:淘宝抢购 加入购物车 编辑:程序博客网 时间: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);
}
}
};

0 0
原创粉丝点击