Leetcode 392 Is Subsequence

本文探讨了两种解决子序列判断问题的方法:递归与双指针算法。通过对这两种方法的对比,文章详细解释了双指针算法如何在减少空间复杂度的同时提高代码可读性。通过实例代码展示了双指针方法的具体实现。

l
思路: recursion,two pointer。我自己是用recursion写的,后来经人指点后知道了two pointer这个方法(好像挺常用的,课后要多研究下这个方法)。然后我看了标答,发现标答也有two pointer。这可见two pointer的重要性。看了标答two pointer之后我发现其实和我的recursion思路是一样的,只是他用了two pointer,这个方法呢可以decrease space complexity,而且可以使代码more readable。所以我觉得就这题来说还是two pointer解法来的更好。至少不用和recursion一样去想那么多base case。下面我就先展示一下two pointer代码,再展示我的recursion代码。

// two pointer
class Solution {
    public boolean isSubsequence(String s, String t) {
        int pLeft, pRight;
        for(pLeft = 0,pRight = 0; pRight < t.length()&&pLeft < s.length();){
            if(s.charAt(pLeft) == t.charAt(pRight)){
                pLeft++;
            }
            pRight++;
        }
        return pLeft == s.length();
    }
}
// recursion
class Solution {
    public boolean isSubsequence(String s, String t) {
        if(s.length() == 1){return t.contains(s);}
        if(s.length() == 0){return true;}
        if(s.length() > t.length()){return false;}
        StringBuilder sb = new StringBuilder(t);
        for(int i = 0; i < sb.length(); i++){
            if(t.contains(Character.toString(s.charAt(0))))
            {
                return isSubsequence(s.substring(1),sb.substring(sb.indexOf(Character.toString(s.charAt(0))) + 1));
            }
        }
        return false;
    }
}

总结:

  1. two pointer 算法!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值