Easy
678142FavoriteShare
Given a string s and a string t, check if s is subsequence of t.
You may assume that there is only lower case English letters in both s and t. t is potentially a very long (length ~= 500,000) string, and s is a short string (<=100).
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).
Example 1:
s = "abc"
, t = "ahbgdc"
Return true
.
Example 2:
s = "axc"
, t = "ahbgdc"
Return false
.
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 for adding this problem and creating all test cases.
C++:
/*
* @Autor: SourDumplings
* @Date: 2019-09-21 17:09:37
* @Link: https://github.com/SourDumplings/
* @Email: changzheng300@foxmail.com
* @Description: https://leetcode.com/problems/is-subsequence/
*/
class Solution
{
public:
bool isSubsequence(string s, string t)
{
int ls = s.length();
int lt = t.length();
int j = 0;
for (int i = 0; i < ls; i++)
{
for (; j < lt; j++)
{
if (s[i] == t[j])
{
j++;
break;
}
}
if (j == lt && s[i] != t[j - 1])
{
return false;
}
}
return true;
}
};
Java:
/*
* @Autor: SourDumplings
* @Date: 2019-09-21 17:42:07
* @Link: https://github.com/SourDumplings/
* @Email: changzheng300@foxmail.com
* @Description: https://leetcode.com/problems/is-subsequence/
*/
class Solution
{
public boolean isSubsequence(String s, String t)
{
int j = 0;
int ls = s.length();
int lt = t.length();
if (lt == 0 && ls > 0)
{
return false;
}
for (int i = 0; i < ls; i++)
{
char ci = s.charAt(i);
for (; j < lt; j++)
{
char cj = t.charAt(j);
if (ci == cj)
{
++j;
break;
}
}
if (j == lt && ci != t.charAt(j - 1))
{
return false;
}
}
return true;
}
}