
双指针
本题询问的是,s 是否是 t 的子序列,因此只要能找到任意一种 s 在 t 中出现的方式,即可认为 s 是 tt的子序列。而当我们从前往后匹配,可以发现每次贪心地匹配靠前的字符是最优决策。
这样,我们初始化两个指针 i 和 index,分别指向 s 和 t 的初始位置。每次贪心地匹配,匹配成功则 i 和 index 同时右移,匹配 s 的下一个位置,匹配失败则 index 右移,i 不变,尝试用 t 的下一个字符匹配 s。
最终如果 i 移动到 s 的末尾,就说明 s 是 t 的子序列。
- 代码实现:
class Solution {
public boolean isSubsequence(String s, String t) {
int len1 = s.length();
int len2 = t.length();
if(len1 > len2){
return false;
}
if(len1 == 0){
return true;
}
int index = 0;
for(int i = 0;i < len1;i++){
if(len1 - i > len2 - index){
return false;
}
while(index < len2){
if(s.charAt(i) == t.charAt(index)){
index++;
break;
}else if(index == len2 - 1){
return false;
}
index++;
}
}
return true;
}
}
网友评论