1. 判断子序列(相对位置是不变的)
(1)双指针
使用两个指针分别指向两个字符串的起始索引,每次循环判断两个指针指向的字符是否相等,相等则两个指针向右移动,不相等则只移动 s 的指针。最后如果 t 指针移动到末尾,则 t 是为 s 的子序列。
class Solution {
public boolean isSubsequence(String t, String s) {
int indext = 0, indexs = 0;
while (indext < t.length() && indexs < s.length()) {
if (t.charAt(indext) == s.charAt(indexs)) {
indext++;
}
indexs++;
}
return indext == t.length();
}
}
(2)使用API
直接使用 indexOf 方法,判断从指定下标起,是否存在字符 c。不存在,则 t 不是为 s 的子序列
class Solution {
public boolean isSubsequence(String t, String s) {
int index = -1;
for (int i = 0; i < t.length(); i++) {
//从index + 1开始获取字符t.charAt(i)在s中的的位置
index = s.indexOf(t.charAt(i), index + 1);
if (index == -1) {
return false;
}
}
return true;
}
}
2. 判断子串
(1) contains
方法返回true,当且仅当此字符串包含指定的char值序列
public static void main