522 最长特殊序列 II(子序列)

1. 问题描述:

给定字符串列表,你需要从它们中找出最长的特殊序列。最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)。子序列可以通过删去字符串中的某些字符实现,但不能改变剩余字符的相对顺序。空序列为所有字符串的子序列,任何字符串为其自身的子序列。输入将是一个字符串列表,输出是最长特殊序列的长度。如果最长特殊序列不存在,返回 -1 。

示例:

输入: "aba", "cdc", "eae"
输出: 3

提示:

所有给定的字符串长度不会超过 10 。
给定字符串列表的长度将在 [2,50 ] 之间。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-uncommon-subsequence-ii

2. 思路分析:

这道题目与力扣521题是类似的,这道题目是有n个字符串,我们需要在这n个字符串中找到不是其他字符串的最长的子序列,这里我们也可以考虑答案是否是在者n个字符串中的一个,分析可以发现答案可能是在这n个字符串中的一个(有可能答案不存在),为什么呢?因为如果一个序列的子序列是特殊序列,那么当前的序列肯定也是特殊序列,因为当前的子序列是更长的,所以我们只需要在n个字符串中找答案即可,如何快速判断一个字符串是否是另外一个字符串的子序列呢?这里可以使用双指针算法。

3. 代码如下:

from typing import List


class Solution:
    # 双指针算法判断字符串a是否是b的子序列
    def check(self, a: str, b: str):
        k = 0
        for i in range(len(b)):
            if k < len(a) and a[k] == b[i]: k += 1
        return k == len(a)

    def findLUSlength(self, w: List[str]) -> int:
        res = -1
        for i in range(len(w)):
            is_sub = 0
            for j in range(len(w)):
                # 判断当前的字符串是否是另外一个字符串的子序列
                if i != j and self.check(w[i], w[j]):
                    is_sub = 1
            if is_sub == 0: res = max(res, len(w[i]))
        return res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值