Day 55|392.判断子序列 |115.不同的子序列
发布人:shili8
发布时间:2025-01-05 17:39
阅读次数:0
**Day55 |392. 判断子序列**
在本题中,我们需要判断一个给定的字符串是否能被另一个字符串的子序列组成。也就是说,是否存在一个子序列,使得将这个子序列中的所有字符都排列起来,就等同于原始的字符串。
**问题描述**
给定两个字符串 `s` 和 `t`,其中 `t` 是 `s` 的子序列。我们需要判断 `s` 是否能被 `t` 的子序列组成。
**示例1**
输入:`s = "abc", t = "ahbgdc"`
输出:`True`
解释:由于 `t` 是 `s` 的子序列,因此 `s` 可以由 `t` 的子序列组成。
**示例2**
输入:`s = "axc", t = "ahbgdc"`
输出:`False`
解释:由于 `t` 不是 `s` 的子序列,因此 `s`不能由 `t` 的子序列组成。
**解决方案**
我们可以使用滑动窗口法来解决这个问题。具体来说,我们可以维护一个滑动窗口,表示当前正在考虑的子序列。每当我们发现滑动窗口中的所有字符都出现在原始字符串中时,我们就更新答案。
def isSubsequence(s: str, t: str) -> bool: """ 判断 s 是否能被 t 的子序列组成。 Args: s (str): 原始字符串。 t (str): 子序列。 Returns: bool: True 如果 s 可以由 t 的子序列组成,False 否则。 """ # 初始化滑动窗口 window = [] # 遍历原始字符串 for char in s: # 如果当前字符出现在滑动窗口中,则更新答案 if char in window: return True # 否则,添加当前字符到滑动窗口中 window.append(char) # 如果滑动窗口中的所有字符都出现在原始字符串中,则更新答案 if all(char in s for char in window): return True # 如果遍历完成后仍然没有找到子序列,则返回 False return False# 测试用例print(isSubsequence("abc", "ahbgdc")) # Trueprint(isSubsequence("axc", "ahbgdc")) # False
**注释**
* 我们使用滑动窗口法来解决这个问题,因为它可以有效地减少时间复杂度。
* 每当我们发现滑动窗口中的所有字符都出现在原始字符串中时,我们就更新答案。
* 如果遍历完成后仍然没有找到子序列,则返回 False。
**总结**
本题要求判断一个给定的字符串是否能被另一个字符串的子序列组成。我们使用滑动窗口法来解决这个问题,并提供了示例和代码注释。