[leetcode刷题]力扣刷题10之判断子序列(简单)

通过这题学习了指针和单指针算法

题目

判断子序列

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace""abcde"的一个子序列,而"aec"不是)。

思路

刚开始没思路,想用最简单的两个遍历,搜索,把记录存下来做,后来想了想可以用更简单的解法,写完之后才知道是单指针算法,正好学习了一下。还有一点就是当子序列已经在原始字符串中找到了之后就可以停止寻找,进一步优化代码。

单指针算法

是指在处理两个序列(或两个集合)相关的操作时,使用一个指针来逐步遍历其中一个序列,并根据某种条件来决定是否移动该指针。在你的问题中,单指针算法 是通过遍历 t,并同时检查 s 中的字符是否能按照顺序依次匹配到。

单指针算法的特点:

  1. 单一指针:只有一个指针跟踪匹配的进度(如 s 中的字符)。
  2. 顺序遍历:遍历一个序列的每个元素,同时依据某种条件(如匹配字符)来移动指针。
  3. 效率高:在问题中,单指针算法可以通过一轮遍历实现匹配,且时间复杂度通常为 O(n)。

代码

class Solution:
    def isSubsequence(self, s: str, t: str) -> bool:
        a=list(s)
        b=list(t)
        c=0
        for i in range(len(b)):
            if c == len(a):  # 如果已经匹配完所有 a 中的字符,提前返回 True
                return True
            if a[c]==b[i]:
                c+=1
        return c == len(a)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值