字符串处理与二维dp
设置二维数组v[i][j]表示S串中前i个字母的子串中包含多少个T串中前j个字母的子串”这样的问题记为A[i][j]。 可以得到递推式 :
if(S[i-1] == T[j-1]) A[i][j] = A[i-1][j-1] + A[i-1][j];
else A[i][j] = A[i-1][j];
class Solution { public: int numDistinct(string S, string T) { int m=S.size(); int n=T.size(); vector<vector<int>> v(m+1,vector<int>(n+1)); v[0][0]=1; for(int i=1;i<m+1;i++) v[i][0]=1; for(int j=1;j<n+1;j++) v[0][j]=0; for(int i=1;i<m+1;i++) { for(int j=1;j<n+1;j++) { if(S[i-1]!=T[j-1]) { v[i][j]=v[i-1][j]; } else v[i][j]=v[i-1][j-1]+v[i-1][j]; } } return v[m][n]; } };