本文最后更新于160 天前,其中的信息可能已经过时,如有错误请发送邮件到2446865563@qq.com
1.题目基本信息
1.1.题目描述
给定字符串列表 strs ,返回其中 最长的特殊序列 的长度。如果最长特殊序列不存在,返回 -1 。
特殊序列 定义如下:该序列为某字符串 独有的子序列(即不能是其他字符串的子序列)。
s 的 子序列可以通过删去字符串 s 中的某些字符实现。
- 例如,"abc" 是 "aebdc" 的子序列,因为您可以删除"aebdc"中的下划线字符来得到 "abc" 。"aebdc"的子序列还包括"aebdc"、 "aeb" 和 "" (空字符串)。
1.2.题目地址
https://leetcode.cn/problems/longest-uncommon-subsequence-ii/description/
2.解题方法
2.1.解题思路
贪心+枚举
2.2.解题步骤
第一步,构建函数判断字符串s是否是字符串t的子串
第二步,根据贪心的思想。越长的字符串越有可能是「特殊序列」,所以先根据字符串长度对字符串序列进行排序
第三步,优先枚举长的的字符串,进行两两组合枚举,找到最长的「特殊序列」的长度
3.解题代码
python3代码
class Solution:
# 思路:贪心+枚举
def findLUSlength(self, strs: List[str]) -> int:
# 第一步,构建函数判断字符串s是否是字符串t的子串
def isSubStr(s:str, t:str) -> bool:
i = 0
for c in t:
if s[i] == c:
i += 1
if i == len(s):
return True
return False
# 第二步,根据贪心的思想。越长的字符串越有可能是「特殊序列」,所以先根据字符串长度对字符串序列进行排序
strs.sort(key = len, reverse = True)
# 第三步,优先枚举长的的字符串,进行两两组合枚举,找到最长的「特殊序列」的长度
for i in range(len(strs)):
ok = True
for j in range(len(strs)):
if i != j and isSubStr(strs[i], strs[j]):
ok = False
break
if ok:
return len(strs[i])
return -1
4.执行结果










