美文网首页LeetCode每日一题
LeetCode每日一题:判断子序列

LeetCode每日一题:判断子序列

作者: Patarw | 来源:发表于2020-08-14 15:03 被阅读0次

双指针

本题询问的是,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;
}
}

相关文章

网友评论

    本文标题:LeetCode每日一题:判断子序列

    本文链接:https://www.haomeiwen.com/subject/eyhgdktx.html