# 【LeetCode】 392. Is Subsequence ## Description > Given a string **s** and a string **t**, check if **s** is subsequence of **t**. > A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, `"ace"` is a subsequence of `"abcde"` while `"aec"` is not). > Follow up: If there are lots of incoming S, say S1, S2, ... , Sk where k >= 1B, and you want to check one by one to see if T has its subsequence. In this scenario, how would you change your code? > Credits: Special thanks to [@pbrother](https://leetcode.com/pbrother/) for adding this problem and creating all test cases. > Constraints: > * `0 <= s.length <= 100` > * `0 <= t.length <= 10^4` > * Both strings consists only of lowercase characters. > 給予一個字串**s**和一個字串**t**,檢查**s**是否為**t**的子序列。 > 一個字串的子序列是指一個新字串,它透過刪除原字串中的部分字元(可以不刪除)且不移動其餘字元的相對位置所得到(例如,`"ace"`是`"abcde"`的子序列而`"aec"`不是)。 > 進階: > 如果有一堆輸入 S,分別為 S1, S2, ... , Sk 且 k >= 1B,你想要一個個檢查T是否為它的子序列。在這樣的情況下,你要怎麼更改你的程式碼? > 工作人員: > 特別感謝[@pbrother](https://leetcode.com/pbrother/)加入這個問題和提供全部的測試資料。 > 限制: > * `0 <= s.length <= 100` > * `0 <= t.length <= 10^4` > * 兩個字元都只包含小寫字元。 ## Example: ``` Example 1: Input: s = "abc", t = "ahbgdc" Output: true Example 2: Input: s = "axc", t = "ahbgdc" Output: false ``` ## Solution * 用一個箭頭(int)指向較短字串`s`的開頭,然後用迴圈跑一次較長的字串`t`。 * 當兩者相同時,將`s`的箭頭往下移一個字。 * 當`t`跑完之後,檢查`s`的箭頭是否指到尾端的後一格。 ### Code ```C++=1 class Solution { public: bool isSubsequence(string s, string t) { int now = 0; for(int i = 0; i < t.length() && now < s.length(); i++) { if(s[now] == t[i]) now++; } return now == s.length(); } }; ``` ###### tags: `LeetCode` `C++`