0
点赞
收藏
分享

微信扫一扫

leetcode:522. 最长特殊序列 II【判断子序列 + 排序 + 一点小技巧】

修炼之士 2022-04-30 阅读 31

在这里插入图片描述

分析

首先只需要考虑字符串本身,如果有一个最长的(唯一的)那它肯定是独有的
因此我们两重循环(从最长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

总结

贪心判断子序列 + 排序

举报

相关推荐

0 条评论