hello 大家好!今天开写一个新章节,每一天一道算法题。让我们一起来学习算法思维吧!
function isSubsequence(s, t) {// 初始化两个指针,分别指向字符串 s 和 t 的起始位置let i = 0; let j = 0; // 当两个指针都未超出对应字符串的长度时进行循环while (i < s.length && j < t.length) {// 如果当前 s 指针指向的字符和 t 指针指向的字符相同if (s[i] === t[j]) {// s 指针向后移动一位,继续匹配下一个字符i++; }// 无论是否匹配成功,t 指针都向后移动一位j++; }// 如果 s 指针已经遍历完 s 字符串,说明 s 是 t 的子序列return i === s.length;
}// 测试示例
const s = "ace";
const t = "abcde";
console.log(isSubsequence(s, t));
代码解释
这段代码使用双指针法来判断字符串 s 是否为字符串 t 的子序列。具体步骤如下:
- 初始化两个指针 i 和 j 分别指向 s 和 t 的起始位置。
- 进入 while 循环,只要 i 小于 s 的长度且 j 小于 t 的长度,就持续循环。
- 在循环中,如果 s[i] 等于 t[j],说明找到了一个匹配的字符,将 i 指针向后移动一位。
- 无论是否匹配成功,j 指针都向后移动一位,继续在 t 中寻找下一个可能匹配的字符。
- 当循环结束后,如果 i 等于 s 的长度,说明 s 中的所有字符都在 t 中按顺序找到了匹配,即 s 是 t 的子序列,返回
true;否则返回 false。