leetcode-115. Distinct Subsequences

来源:互联网 发布:dns 免费域名转发 编辑:程序博客网 时间:2024/06/05 19:42

题目链接:点击打开链接

解:



代码C++:

#include <iostream>#include <string>#include <map>#include <vector>#include <set>#include <stack>#include <queue>using namespace std;const int N = 13000;int table[N][N] = {0};int flag[N][N] = {0};int numDistinct(string s, string t) {    int slen = s.length();    int tlen = t.length();    if(slen < tlen || slen == 0){        return 0;    }    int table[tlen+1][slen+1]={0};    int flag[tlen+1][slen+1]={0};    for(int i=0; i<=tlen; i++){        for(int j=0; j<=slen; j++){            table[i][j] = 0;            flag[i][j] = 0;        }    }    for (int i=1; i<=tlen; i++){        for(int j=1; j<=slen; j++){            table[i][j] = max(table[i-1][j],table[i][j-1]);            if(t[i-1] == s[j-1]){                if (table[i-1][j-1]+1 >= table[i][j]){                    table[i][j] = table[i-1][j-1]+1;                    if (flag[i-1][j-1] < 1){flag[i-1][j-1]=1;}                    if(table[i][j] == table[i][j-1]){                        flag[i][j] = flag[i-1][j-1] + flag[i][j-1];                    }else{                        flag[i][j] = flag[i-1][j-1];                    }                }            }else{                flag[i][j] = flag[i][j-1];            }        }    }    if (table[tlen][slen] < tlen){return 0;}    return flag[tlen][slen];}int main(){    //string S = "rabbbit", T = "rabbit";    string S = "aaabbbbbaaaaa";    string T = "bbaab";    cout << numDistinct(S,T) <<endl;    return 0;}


0 0