算法训练营第四十二天(9.4)| 动态规划Part15:距离

Leecode 1143.最长公共子序列

题目地址:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目类型:最长子序列

双指针: 

class Solution {
public:
    bool isSubsequence(string s, string t) {
        int i = 0, j = 0;
        while (i < s.size() && j < t.size()) {
            if (s[i] == t[j]) {
                i++;
                j++;
            }
            else {
                j++;
            }
        }
        if (i == s.size()) return true;
        return false;
    }
};

 动态规划:

class Solution {
public:
    bool isSubsequence(string s, string t) {
        int m = s.size(), n = t.size();
        // dp[i][j]代表
        vector> dp(m + 1, vector(n + 1));
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                if (s[i - 1] == t[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;
                // 由于要求s是连续的,所以不考虑dp[i - 1][j]的情况
                else dp[i][j] = dp[i][j - 1];
            }
        }
        return dp[m][n] == m ? true : false;
    }
};

你可能感兴趣的:(算法,动态规划)