115. 不同的子序列
题目链接:115. 不同的子序列 - 力扣(LeetCode)
解析:
简单dp,虽然题目说int范围内,但会中间值会越界,既然结果在int范围内,越界的直接mod int_max就好了
dp[n][m]表示s的n + 1个数是否可以从t的m + 1个数得到
当s[n] == t[m]的时候,dp[n][m] = dp[n - 1][m] + dp[n - 1][m - 1]
当s[n] != t[m]的时候,dp[n][m] = dp[n - 1][m]
class Solution { public: int numDistinct(string s, string t) { int n = s.length(); int m = t.length(); int dp[1010][1010]; memset(dp, 0, sizeof(dp)); int mod = 2147483647; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (i == 0 && j == 0) { if (s[i] == t[j]) dp[i][j] = 1; else dp[i][j] = 0; } else if (i < j) { dp[i][j] = 0; } else { if (s[i] == t[j]) { dp[i][j] = dp[i - 1][j]; if (j == 0) dp[i][j] = (dp[i][j] + 1) % mod; else dp[i][j] = ((long long)dp[i][j] + (long long)dp[i - 1][j - 1]) % mod; } else { dp[i][j] = dp[i - 1][j]; } } } } return dp[n - 1][m - 1]; } };
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号