# LC 392. Is Subsequence
### [Problem link](https://leetcode.com/problems/is-subsequence/)
###### tags: `leedcode` `python` `c++` `easy` `DP` `LCS` `Sliding Window`
Given two strings <code>s</code> and <code>t</code>, return <code>true</code> if <code>s</code> is a **subsequence** of <code>t</code>, or <code>false</code> otherwise.
A **subsequence** of a string is a new string that is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (i.e., <code>"ace"</code> is a subsequence of <code>"abcde"</code> while <code>"aec"</code> is not).
**Example 1:**
```
Input: s = "abc", t = "ahbgdc"
Output: true
```
**Example 2:**
```
Input: s = "axc", t = "ahbgdc"
Output: false
```
**Constraints:**
- <code>0 <= s.length <= 100</code>
- <code>0 <= t.length <= 10<sup>4</sup></code>
- <code>s</code> and <code>t</code> consist only of lowercase English letters.
**Follow up:** Suppose there are lots of incoming <code>s</code>, say <code>s<sub>1</sub>, s<sub>2</sub>, ..., s<sub>k</sub></code> where <code>k >= 10<sup>9</sup></code>, and you want to check one by one to see if <code>t</code> has its subsequence. In this scenario, how would you change your code?
## Solution 1 - DP
```python=
class Solution:
def isSubsequence(self, s: str, t: str) -> bool:
m, n = len(s), len(t)
dp = [[0] * (n + 1) for _ in range(m + 1)]
for i in range(1, m + 1):
for j in range(1, n + 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])
return dp[-1][-1] == m
```
## Solution 2 - Sliding Window
#### Python
```python=
class Solution:
def isSubsequence(self, s: str, t: str) -> bool:
m, n = len(s), len(t)
p1, p2 = 0, 0
while p1 < m and p2 < n:
if s[p1] == t[p2]:
p1 += 1
p2 += 1
return p1 == m
```
#### C++
```cpp=
class Solution {
public:
bool isSubsequence(string s, string t) {
int p1 = 0;
int p2 = 0;
while (p1 != s.size() && p2 != t.size()) {
if (s[p1] == t[p2]) {
p1++;
}
p2++;
}
return p1 == s.size();
}
};
```
>### Complexity
>m = len(s)
>n = len(t)
>| | Time Complexity | Space Complexity |
>| ----------- | --------------- | ---------------- |
>| Solution 1 | O(mn) | O(mn) |
>| Solution 2 | O(m + n) | O(1) |
## Note
x