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:
Input: s = "abc", t = "ahbgdc"
Output: true
Example 2:
Input: s = "axc", t = "ahbgdc"
Output: false
Constraints:
- 0 <= s.length <= 100
- 0 <= t.length <= 104
- s and t consist only of lowercase English letters.
My Solution
We can solve this problem with the two pointer technique. One pointer starts at the start of s. The other pointer starts at the start of t. If the characters at the two pointers match, we move both pointers forward. Otherwise we only move t’s pointer forward. If we reach the end of s, then it is a subsequence so we return true. Otherwise, we return false.
class Solution {
public boolean isSubsequence(String s, String t) {
int i = 0;
int j = 0;
int m = s.length();
int n = t.length();
while (i < m && j < n) {
if (s.charAt(i) == t.charAt(j)) {
i++;
}
j++;
}
return (i == m);
}
}