分析
首先只需要考虑字符串本身,如果有一个最长的(唯一的)那它肯定是独有的
因此我们两重循环(从最长str的判断) 判断这个str是否是其他的子序列即可
若不是 则返回这个的长度
若是 考察下一组
若都无 则返回-1
这里子序列的判断算法采用了index的贪心
每次记录s在t的index 然后用find(t, index)对index进行更新
保持相对顺序即可
ac code
class Solution:
def findLUSlength(self, strs: List[str]) -> int:
# 贪心判断子序列
def isSubsequence(s: str, t: str) -> bool:
# s 是 t的子序列吗
index = 0
for value in s:
# 从index开始往后找
# 保持子序列的顺序性
index = t.find(value, index)
if index == -1:
return False
index += 1
return True
# 最长的独有的肯定可以
strs.sort(key = lambda x: -len(x))
n = len(strs)
# 从长往短找,找的是自己本身
for i in range(n):
flag = True
for j in range(n):
# 若c1是子序列
if i != j and isSubsequence(strs[i], strs[j]):
flag = False
break
if flag:
return len(strs[i])
return -1
总结
贪心判断子序列 + 排序