📜  门| GATE-CS-2000 |第 49 题(1)

📅  最后修改于: 2023-12-03 14:58:24.328000             🧑  作者: Mango

题目描述

给定两个字符串S和T,判断S是否为T的子序列。

子序列的定义:对于字符串S和T,如果可以通过从T中删除一些字符来获得S,则称S是T的子序列。 例如,S =“abc”是T =“ahbgdc” 的子序列,而S =“axc”不是T =“ahbgdc” 的子序列。

函数签名

def is_subsequence(s: str, t: str) -> bool:
    pass
输入
  • s:字符串,长度不超过100。
  • t:字符串,长度不超过10000。
输出

如果s是t的子序列,则返回True,否则返回False。

示例

输入1:

s = "abc"
t = "ahbgdc"

输出1:

True

输入2:

s = "axc"
t = "ahbgdc"

输出2:

False

解题思路

该题目可以使用双指针算法解决。 在S和T中分别初始化两个指针i和j,分别对应S和T的第一个字符,如果S[i] == T[j],则i和j都加1;否则只有j加1。 最后,如果i等于S的长度,则S是T的子序列,否则不是。

代码实现

def is_subsequence(s: str, t: str) -> bool:
    i, j = 0, 0
    while i < len(s) and j < len(t):
        if s[i] == t[j]:
            i += 1
        j += 1
    return i == len(s)

以上是该问题的解法,感谢您的耐心阅读。