> For the complete documentation index, see [llms.txt](https://junnie.gitbook.io/nine-chapter/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://junnie.gitbook.io/nine-chapter/7.two-pointers/392.-is-subsequence.md).

# 392. Is Subsequence

Easy

Given two strings `s` and `t`, return `true` *if* `s` *is a **subsequence** of* `t`*, or* `false` *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., `"ace"` is a subsequence of `"abcde"` while `"aec"` is not).

&#x20;

**Example 1:**

<pre><code><strong>Input: s = "abc", t = "ahbgdc"
</strong><strong>Output: true
</strong></code></pre>

**Example 2:**

<pre><code><strong>Input: s = "axc", t = "ahbgdc"
</strong><strong>Output: false
</strong></code></pre>

&#x20;

**Constraints:**

* `0 <= s.length <= 100`
* `0 <= t.length <= 104`
* `s` and `t` consist only of lowercase English letters.

&#x20;

**Follow up:** Suppose there are lots of incoming `s`, say `s1, s2, ..., sk` where `k >= 109`, and you want to check one by one to see if `t` has its subsequence. In this scenario, how would you change your code?

#### Intuition : <a href="#intuition" id="intuition"></a>

The problem requires checking if the characters in ( s ) appear in ( t ) in the same order. This can be achieved by iterating over ( t ) and trying to match each character in ( s ) sequentially. If all characters of ( s ) are found in ( t ) in the required order, then ( s ) is a subsequence of ( t ).

#### Approach : <a href="#approach" id="approach"></a>

1. **Two Pointers**: Use two pointers, one for ( s ) and one for ( t ).
2. **Character Matching**:
   * Traverse ( t ) using the ( t )-pointer.
   * Each time a character in ( t ) matches the current character in ( s ), move the ( s )-pointer to the next character.
3. **Check Completion**: If the ( s )-pointer reaches the end of ( s ), then all characters were matched in order, so return `true`.
4. **End Condition**: If the loop completes and the ( s )-pointer has not reached the end, return `false`.

#### Solving Steps ; <a href="#solving-steps" id="solving-steps"></a>

1. Initialize pointers for both ( s ) and ( t ) at the start.
2. Iterate over ( t ) and try to match each character in ( s ).
3. If the ( s )-pointer reaches the length of ( s ), return `true`.
4. If the iteration ends without completing ( s ), return `false`.

**Code:**

```java
class Solution {
    public boolean isSubsequence(String s, String t) {

    int indexS = 0;
    int indexT = 0;
    while(indexS < s.length() && indexT < t.length()){

        if(t.charAt(indexT) == s.charAt(indexS))
        {
            indexS++;
        }
        indexT++;
      }

      return indexS == s.length();
    }
}
```

<br>
