第二题我看了很久还是没太明白,我发现理解动规有一点点吃力了啊,努努力。
392.判断子序列
总感觉在不等于的时候,应该是dp[i][j] = dp[i-1][j-2];
这里其实按他那个图会更好理解一点。
class Solution {
public:bool isSubsequence(string s, string t) {vector<vector<int>>dp(s.size()+1,vector<int>(t.size()+1,0));for(int i = 1;i<= s.size();i++){for(int j = 1;j<=t.size();j++){if(s[i-1] == t[j-1]){dp[i][j] = dp[i-1][j-1] + 1;}else{dp[i][j] = dp[i][j-1];}}}if(dp[s.size()][t.size()] == s.size())return true;return false;}
};
115.不同的子序列
对10^9 + 7取模,所以还是挺大的,比2^8大,所以不能vector<int>
整了个vector<long long>
同时我发现这种dp[i][j]可以画几行去理解。找一下加的规律,会好写
class Solution {
public:bool isSubsequence(string s, string t) {vector<vector<long long>>dp(s.size()+1,vector<long long>(t.size()+1,0));for(int i = 1;i<= s.size();i++){for(int j = 1;j<=t.size();j++){if(s[i-1] == t[j-1]){dp[i][j] = dp[i-1][j-1] + 1;}else{dp[i][j] = dp[i][j-1];}}}if(dp[s.size()][t.size()] == s.size())return true;return false;}
};
还有两天可以去听棱镜!