数据结构【字符串、双指针】| leetcode 392. 判断子序列(简单)

代码链接:https://leetcode.cn/problems/is-subsequence/solution/by-jyd-zeph/

思路及算法:双指针

设置双指针 i , j i, j i,j 分别指向字符串 s , t s, t s,t 的首个字符,遍历字符串 t t t

  • s [ i ] = = t [ j ] s[i] == t[j] s[i]==t[j] 时,代表匹配成功,此时同时 i + + , j + + i++, j++ i++,j++
    进而,若 i i i 已走过 s s s 尾部,代表 s s s t t t 的子序列,此时应提前返回 true ;
  • s [ i ] ! = t [ j ] s[i] != t[j] s[i]!=t[j] 时,代表匹配失败,此时仅 j + + j++ j++

若遍历完字符串 t t t 后,字符串 s s s 仍未遍历完,代表 s s s 不是 t t t 的子序列,此时返回 false 。

class Solution:
    def isSubsequence(self, s: str, t: str) -> bool:
        n = len(s)
        m = len(t)
        i, j = 0, 0
        while i < n and j < m:
            if s[i] == t[j]:
                i += 1
            j += 1
        # if i == n:
        #     return True
        return (i == n)

复杂度分析:

  • 时间复杂度 O ( N ) O(N) O(N): 其中 N N N 为字符串 t t t 的长度。最差情况下需完整遍历 t t t
  • 空间复杂度 O ( 1 ) O(1) O(1) i , j i, j i,j 变量使用常数大小空间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值