public boolean isSubsequence(String s, String t) {
for(char c : s.toCharArray())比 s.charAt(i)快
判断子序列
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
int | indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。 |
int | indexOf(int ch, int fromIndex) 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。 |
char | charAt(int index) 返回指定索引处的 char 值。 |
char[] | toCharArray() 将此字符串转换为一个新的字符数组。 |
- 对于要匹配的短字符串,遍历每一个字符,
- 不断地寻找该字符在长字符串中的位置,然后将位置更新,寻找下一个字符,相当于在长字符串上“跳跃”。
- 如果下一个位置为 -1,表示长字符串再没有该字符了,返回 false 即可。
- 如果能正常遍历完毕,则表示可行,返回 true.
双指针
- 我们初始化两个指针 i 和 j,分别指向 s 和 t 的初始位置。
- 每次贪心地匹配,匹配成功则 i 和 j同时右移,匹配 s 的下一个位置,
- 匹配失败则 j 右移,i 不变,尝试用 t 的下一个字符匹配 s。
- 最终如果 i 移动到 s 的末尾,就说明 s 是 t 的子序列。