字符串子序列检测算法
2023年1月5日 · 63 字 · 1 分钟
本文分享一种检测一个字符串是否为另一个字符串子序列的算法。
子序列的定义:
若字符串$s1$可以由字符串$s2$删除某些字符得到,则$s1$是$s2$的子序列。换句话说,若$s1$的所有字符都在$s2$中且顺序一致,则$s1$是$s2$的子序列。
例如:
a是aaa的子序列,adf是abcdef的子序列,但是cba不是abc的子序列(因为字符顺序变了)。
算法
- 声明$s1$的下标变量$strIndex$,若$s2$有$s1$的该字符,则$strIndex+1$
- 若遍历过程中$strIndex$和$s1$的长度相等,则证明$s1$所有字符都在$s2$中,返回$s1$是$s2$在子序列
- 遍历结束仍未返回,证明$s1$不是$s2$的子序列
代码
class Solution {
public boolean isSubsequent(String str, String str1) {
var strIndex = 0;
// 逐字符遍历
// 如果字符想通,则strIndex++
// 如果strIndex到达末尾,则证明str是子序列
for (var i = 0; i < str1.length(); i++) {
if (str.charAt(strIndex) == str1.charAt(i)) {
strIndex++;
}
if (strIndex == str.length()) {
return true;
}
}
return false;
}
}
复杂度分析
时间复杂度:$O(n)$,$n$是$str1$的长度。
空间复杂度:$O(1)$。