关于Leetcode“判断子序列”的思考

题目链接:leetcode,判断子序列


这道题目在leetcode的分类为简单,这道题自然也不难。思路非常明确,1、从子序列中使用遍历(即双循环)的方式在父序列中进行查找,将在父序列中找到的元素的索引存储在空列表中;
2、对于空列表前后的元素进行大小核对,防止出现子序列顺序与父序列顺序不符合的情况;
函数的主体部分主要使用循环与条件语句组成,之间相互的嵌套关系非常复杂,原谅我知识浅薄,编程能力低下,弄了三个多小时都没有弄出来,有大神可以尝试一下,在这里我就不贴出代码了。

当我在双循环里挣扎的时候,慢慢也发现了问题的所在。由于规定了“子序列就是由父序列删除若干元素后组成”,所以当子序列搜索到父序列中的一个元素后,下一个子序列元素就不用从父序列的头部开始搜索,直接从搜索到的父序列中的元素开始搜索就好了。
同时,题目要求的返回值为(True/False),所以我们没有必要去记录相应父序列的元素索引,当检测到有对应元素时直接开始从下一个父序列的元素开始搜索下一位子序列元素就好了。(这里说的可能有点绕)
这里我们就联想到了C/C++中的指针了,然而Python没有指针,我们就用列表的索引来代替就好了,代码如下:

class Solution:
    def isSubsequence(self, s, t):
        i = 0
        j = 0

        if len(s)>=len(t) and s!=t:
            return False

        while i < len(s):
            if s[i] == t[j]:
                i += 1
            if j == len(t)-1 and i!=len(s):
                return False
            j += 1
        return True

上述代码中存在一个条件语句,只是为了防止某些特殊情况发生,和整体思路无关。
最终程序的运行速度为40ms,超过约80%的Python用户,内存使用超越100%的用户。


今天的题目思路可能略微有些跳跃,如果有看的不太懂的欢迎在评论区留言,随时解答~
爱你们~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值