/** * @param {string} s * @param {string} t * @return {boolean} */ const isSubsequence = function (s, t) { return f1(s, t); }; /* 这个题目起始从头到尾遍历开s[1]在不在t中,然后再看s[2]在不在,最后看s[len - 1]在不在,如果在则返回true, 这个题目也可以是使用动态规划,动态规划的思路就是,如果s[i]在t中存在,如果s[i+1:]这个子序列也在t中存在, 那么s[i:]开始的子序列,在t中也存在,定义dp[i]为,字符串s从i开始的所有子序列s[i:]在t[j]之后的子序列中存在 s[i] === t[j] */ function f2(s, t) { if (s.length === 0) return true; if (t.length === 0) return false; const dp = Array(s.length).fill(false); for (let j = t.length - 1, i = s.length - 1; j >= 0 && i >= 0; j--) { if (t[j] === s[i]) { dp[i] = true; i--; } } return dp[0]; }