这道题是有一定的规律的,同样类型的题就是给定的两个字符串,问经过最少的字符删除或者替换能够将两个字符串变成一样。
看过比较好的解法,都是通过动态规划。构建一个二维矩阵d[i][j] 然后,代表两个字符串中的第i,和第j。
class Solution {
public:
int numDistinct(string s, string t) {
int ns=s.size();
int nt=t.size();
vector<vector<int> > d(ns+1,vector<int>(nt+1,0));
for(int i=0;i<ns;++i){
d[i][0]=1;
}
for(int i=1;i<=ns;++i){
for(int j=1;j<=nt;++j){
d[i][j]=d[i-1][j];
if(s[i-1]==t[j-1])
d[i][j]+=d[i-1][j-1];
}
}
return d[ns][nt];
}
}