方法一(动态规划,类似于 1143. 最长公共子序列

示例代码

class Solution {
public:
    bool isSubsequence(string text1, string text2) {
        int len1=text1.length(),len2=text2.length();
        vector<vector<int>> dp(len1+1,vector<int>(len2+1));
        for(int i=1;i<=len1;i++){
            for(int j=1;j<=len2;j++){
                if(text1[i-1]==text2[j-1]){
                    dp[i][j]=dp[i-1][j-1]+1;
                }else{
                    dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
                }
            }
        }
        return dp[len1][len2]==len1;
    }
};
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

效果展示

LeetCode---392. 判断子序列(判断子序列不等于判断公共子序列(eg:相等时候的处理逻辑不一样))_职场和发展

方法二(快慢指针)

示例代码

class Solution {
public:
    bool isSubsequence(string text1, string text2) {
        int len1=text1.length(),len2=text2.length();
        int i=0,j=0;
        while(i<len1&&j<len2){
            if(text1[i]==text2[j]){
                i++;
                j++;
            }else{
                j++;
            }
        }
        
        return i==len1;
    }
};
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

效果展示

LeetCode---392. 判断子序列(判断子序列不等于判断公共子序列(eg:相等时候的处理逻辑不一样))_算法_02