当前位置:实例文章 » 其他实例» [文章]Day55 392.判断子序列 115.不同的子序列

Day55 392.判断子序列 115.不同的子序列

发布人:shili8 发布时间:2024-12-28 17:52 阅读次数:0

**Day55392.判断子序列**

在本题中,我们需要判断一个给定的字符串是否是另一个字符串的子序列。这个问题可以转化为两个字符串的最长公共子序列(LCS)的长度等于较短字符串的长度。

**115.不同的子序列**

在本题中,我们需要找到一个给定字符串的所有不同子序列。这个问题可以通过递归的方式来解决,每次从原字符串中选择一个字符作为起始点,然后继续递归生成子序列。

###代码示例

class Solution:
 def findSubsequences(self, nums: List[int]) -> List[List[int]]:
 res = set()
 def dfs(nums, path):
 if len(path) >=2 and path[-1] == path[-2]:
 return for i in range(len(nums)):
 if not path or nums[i] > path[-1]:
 dfs(nums[i+1:], path + [nums[i]])
 dfs(nums, [])
 return list(res)


###代码注释* `findSubsequences`函数是本题的主函数,负责生成所有不同的子序列。
* `dfs`函数是递归函数,每次从原字符串中选择一个字符作为起始点,然后继续递归生成子序列。
* `res`集合用于存储所有不同的子序列。
* `path`列表用于存储当前的子序列。

### 时间复杂度时间复杂度为 O(2^n),其中 n 是原字符串的长度。每次选择一个字符作为起始点,递归生成子序列,总共有2^n 种可能的选择。

### 空间复杂度空间复杂度为 O(n),用于存储当前的子序列和结果集合。

### 示例输入:nums = [4,3,10,9,8]

输出:[ [3,9],[9,8] ]

解释:最终答案是 [ [3,9],[9,8] ]。请注意,其他子序列也可能存在,但它们不在结果中。

### 扩展本题可以扩展为找到一个给定字符串的所有不同子序列,并且这些子序列的长度至少为 k。这个问题可以通过递归的方式来解决,每次从原字符串中选择一个字符作为起始点,然后继续递归生成子序列。

### 扩展代码示例
class Solution:
 def findSubsequences(self, nums: List[int], k: int) -> List[List[int]]:
 res = set()
 def dfs(nums, path):
 if len(path) >= k and path[-1] == path[-2]:
 return for i in range(len(nums)):
 if not path or nums[i] > path[-1]:
 dfs(nums[i+1:], path + [nums[i]])
 dfs(nums, [])
 return list(res)


### 扩展代码注释* `findSubsequences`函数是本题的主函数,负责生成所有不同的子序列,并且这些子序列的长度至少为 k。
* `dfs`函数是递归函数,每次从原字符串中选择一个字符作为起始点,然后继续递归生成子序列。
* `res`集合用于存储所有不同的子序列。
* `path`列表用于存储当前的子序列。

### 扩展时间复杂度时间复杂度为 O(2^n),其中 n 是原字符串的长度。每次选择一个字符作为起始点,递归生成子序列,总共有2^n 种可能的选择。

### 扩展空间复杂度空间复杂度为 O(n),用于存储当前的子序列和结果集合。

### 扩展示例输入:nums = [4,3,10,9,8], k =2输出:[ [3,9],[9,8] ]

解释:最终答案是 [ [3,9],[9,8] ]。请注意,其他子序列也可能存在,但它们不在结果中。

本题可以通过递归的方式来解决,每次从原字符串中选择一个字符作为起始点,然后继续递归生成子序列。

相关标签:
其他信息

其他资源

Top