第二題我看了很久還是沒太明白,我發現理解動規有一點點吃力了啊,努努力。
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;}
};
還有兩天可以去聽棱鏡!