392. Is Subsequence

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).

 

Example 1:

Example 2:

Constraints:

  • 0 <= s.length <= 100
  • 0 < = t . l e n g t h < = 1 0 4 0 <= t.length <= 10^4 0<=t.length<=104
  • s and t consist only of lowercase English letters.

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?

From: LeetCode
Link: 392. Is Subsequence


Solution:

Ideas:
The function isSubsequence takes two strings s and t and returns a boolean value indicating whether s is a subsequence of t. We use two pointers, i and j, to traverse both strings. If a character in s matches a character in t, we increment both pointers. Otherwise, we increment only the pointer j. If at the end of the traversal, i is equal to the length of s, it means s is a subsequence of t.
Code:
bool isSubsequence(char * s, char * t) {
    int i = 0, j = 0;
    int s_len = strlen(s);
    int t_len = strlen(t);

    while (i < s_len && j < t_len) {
        if (s[i] == t[j]) {
            i++;
        }
        j++;
    }
    
    return i == s_len;
}
07-27 15:50