代码随想录打卡—day55—【编辑距离】— 9.1+9.2 编辑距离系列基础

1 392. 判断子序列

392. 判断子序列

方法1:双指针

class Solution {
public:
    bool isSubsequence(string s, string t) {
        // 双指针
        int l = 0;
        for(int i = 0; i < t.size(); i++)
            if(t[i] == s[l])l++;
        if(l == s.size())return 1;
        else return 0;
    }
};

方法2:dp。和1143. 最长公共子序列 差不多。AC代码:

class Solution {
public:
    // dp
    int dp[105][10010]; // dp[i][j] 表示s的前0..i-1的字符串 和 t的前0..j-1的字符串最长公共子序列长度
    /*
        if(s[i-1] == t[j-1])
        dp[i][j] = dp[i-1][j-1] + 1;
        else dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
        初始化默认都是0
        i++j++
        模拟——
    */
    bool isSubsequence(string s, string t) 
    {
        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] = max(dp[i-1][j],dp[i][j-1]);
            }
        }

        if(dp[s.size()][t.size()] == s.size())return 1;
        else return 0;
    }
};

2 115. 不同的子序列

115. 不同的子序列

有一点难想到。todo

你可能感兴趣的:(SXL,算法)