leetcode 392. 判断子序列

发布于:2023-08-27 ⋅ 阅读:(42) ⋅ 点赞:(0)

2023.8.25

         本题要判断子序列,可以使用动态规划来做,定义一个二维dp数组接下来就是常规的动态规划求解子序列的过程。  给出两种定义dp数组的方法。

二维bool型dp数组:

class Solution {
public:
    bool isSubsequence(string s, string t) {
        if(s.size() == 0 && t.size() == 0) return true;
        if(s.size() == 0) return true;
        if(t.size() == 0) return false;
        vector<vector<bool>> dp(s.size()+1 , vector<bool>(t.size()+1 , false));
        dp[0][0] = true;
        //初始化第一行
        for(int i=1; i<=t.size(); i++)
        {
            dp[0][i] = dp[0][i-1];
        }
        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];
                else dp[i][j] = dp[i][j-1];
            }
        }
        return dp[s.size()][t.size()];
    }
};

二维int型dp数组:

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;
        else return false;
    }
};


网站公告

今日签到

点亮在社区的每一天
去签到