一、题目描述
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
进阶:
如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?
致谢:
特别感谢 ****@pbrother 添加此问题并且创建所有测试用例。
示例 1:
输入: s = "abc", t = "ahbgdc"
输出: true
示例 2:
输入: s = "axc", t = "ahbgdc"
输出: false
提示:
0 <= s.length <= 1000 <= t.length <= 10^4- 两个字符串都只由小写字符组成。
二、思路分析
通过遍历字符串 t 的每个字符,并与字符串 s 的字符进行比较。
- 如果当前字符相等,则将
i的值增加 1,表示在字符串t中找到了s的一个字符 - 当
i的值等于s的长度时,意味着我们已经在字符串t中找到了s的所有字符,且字符的顺序与s中的顺序一致。因此,我们可以判断s是t的子序列,并返回true - 如果循环结束后,仍然没有找到
s的所有字符,或者s的长度大于t的长度,那么说明s不是t的子序列,我们返回false
三、代码答案
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isSubsequence = function (s, t) {
if (s.length === 0) return true
if (s.length > t.length) return false
let i = 0
for (let j = 0; j < t.length; j++) {
if (s[i] === t[j]) i++
if (i === s.length) return true
}
return false
};