🥉Easy

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。

你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,”ace”是”abcde”的一个子序列,而”aec”不是)。

示例 1:

  1. s = "abc", t = "ahbgdc"
  2. 返回 true.

示例 2:

s = "axc", t = "ahbgdc"
返回 false.

后续挑战 :

如果有大量输入的 S,称作S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?

题解

双指针

很简单的一个双指针,怎么就考虑那么复杂!!!

复杂度

  • 时间复杂度: 🥉392.判断子序列 - 图1,其中 ns 的长度,mt 的长度。每次无论是匹配成功还是失败,都有至少一个指针发生右移,两指针能够位移的总距离为 n+m
  • 空间复杂度:🥉392.判断子序列 - 图2

    Python

    ```python class Solution: def isSubsequence(self, s: str, t: str) -> bool:
      i=0
      j=0
      while i<len(s) and j<len(t):
          if s[i]==t[j]:
              i+=1
              j+=1
          else:
              j+=1
      return i == len(s)
    
<a name="ZO5vI"></a>
#### javaScript
```javascript
/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isSubsequence = function(s, t) {
    let i=0
    let j=0
    while(i<s.length && j<t.length){
        if (s[i]===t[j]){
            i++
            j++
        }
        else{
            j++
        }
    }
    return i == s.length
};