392. Is Subsequence
easyCheck whether one string appears as a subsequence of another. Two-pointer solves it in linear time; DP framing prepares you for the follow-up where the source is queried billions of times.
By Sam K., Founder, InterviewChamp.AI · Last verified
Problem
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.
Constraints
0 <= s.length <= 1000 <= t.length <= 10^4s and t consist only of lowercase English letters.
Examples
Example 1
s = "abc", t = "ahbgdc"trueExplanation: The characters a, b, c appear in t in order.
Example 2
s = "axc", t = "ahbgdc"falseSolve it now
Free. No sign-up. Python and JavaScript run instantly in your browser.
Hints
Progressive — try the first before opening the next.
Hint 1
Two pointers: advance through t; advance through s only on a match.
Hint 2
DP framing: dp[i][j] = true if s[0..i-1] is a subsequence of t[0..j-1]. Useful when t is fixed and many queries come in.
Hint 3
If you reach the end of s, you matched everything; return true.
Solution approach
Reveal approach
Two-pointer scan is the linear-time solution. Initialize i = 0 (pointer into s) and j = 0 (pointer into t). While both pointers are in range, if s[i] == t[j] increment i; always increment j. Return i == s.length. The DP framing for the follow-up: define subproblem dp[i][j] = whether s[0..i-1] is a subsequence of t[0..j-1]. The transition is dp[i][j] = dp[i-1][j-1] if s[i-1] == t[j-1] else dp[i][j] = dp[i][j-1]. Base case dp[0][j] = true (empty string is a subsequence of anything). For the indexed-by-character preprocessing variant, build next[t.length][26] where next[i][c] is the next index >= i in t containing character c — each query then runs in O(s.length). Time O(s.length + t.length), space O(1).
Complexity
- Time
- O(s.length + t.length)
- Space
- O(1)
Related patterns
- dynamic-programming
- memoization-recursion
- two-pointers
Related problems
Asked at
Companies reported asking this problem (sourced from public Glassdoor, Blind, and Levels.fyi interview posts).
- Amazon
- Microsoft
More Dynamic Programming practice problems
- 62. Unique Paths
- 70. Climbing Stairs
- 72. Edit Distance
- 91. Decode Ways
- 96. Unique Binary Search Trees
- 118. Pascal's Triangle
- 120. Triangle
- 122. Best Time to Buy and Sell Stock II