返回

Python 实现 LeetCode 392:判断子序列

后端

LeetCode 392:判断子序列

LeetCode 392:判断子序列考察的是一个字符串是否时另一个字符串的子序列。

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

子序列定义为:一个字符串从不改变排列顺序,而只删除某些字符的结果。

例如,"abc" 是 "ahbgdc" 的子序列,因为我们可以从 "ahbgdc" 中删除字符 'h', 'g', 'd' 来得到 "abc"。

示例 1:

输入:s = "abc", t = "ahbgdc"
输出:true

示例 2:

输入:s = "axc", t = "ahbgdc"
输出:false

示例 3:

输入:s = "", t = "ahbgdc"
输出:true

示例 4:

输入:s = "abc", t = ""
输出:false

Python 实现

def is_subsequence(s, t):
  """
  判断 s 是否是 t 的子序列。

  参数:
    s (str): 子序列。
    t (str): 字符串。

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

  # 特殊情况:
  # 如果 s 为空字符串,则它是任何字符串的子序列。
  if not s:
    return True

  # 如果 t 为空字符串,则 s 不可能是 t 的子序列。
  if not t:
    return False

  # 初始化两个指针,分别指向 s 和 t 的第一个字符。
  s_index = 0
  t_index = 0

  # 循环遍历 t 字符串。
  while t_index < len(t):
    # 如果 s 的当前字符与 t 的当前字符相等,则移动 s 的指针。
    if s[s_index] == t[t_index]:
      s_index += 1

    # 如果 s 的指针已经到达末尾,则说明 s 是 t 的子序列。
    if s_index == len(s):
      return True

    # 否则,移动 t 的指针。
    t_index += 1

  # 如果 s 的指针还没有到达末尾,则说明 s 不是 t 的子序列。
  return False

# 测试用例
s1 = "abc"
t1 = "ahbgdc"
print(is_subsequence(s1, t1))  # True

s2 = "axc"
t2 = "ahbgdc"
print(is_subsequence(s2, t2))  # False

s3 = ""
t3 = "ahbgdc"
print(is_subsequence(s3, t3))  # True

s4 = "abc"
t4 = ""
print(is_subsequence(s4, t4))  # False

输出:

True
False
True
False

总结

在本文中,我们详细讲解了如何使用 Python 实现 LeetCode 392:判断子序列。我们提供了详细的代码示例和测试用例,帮助您更好地理解算法的实现。如果您有任何问题,请随时提出。