首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【leetcode刷题】T80-最长特殊序列 II

【leetcode刷题】T80-最长特殊序列 II

作者头像
木又AI帮
修改2019-07-18 10:20:33
修改2019-07-18 10:20:33
6750
举报
文章被收录于专栏:木又AI帮木又AI帮

【题目】

给定字符串列表,你需要从它们中找出最长的特殊序列。最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)。

子序列可以通过删去字符串中的某些字符实现,但不能改变剩余字符的相对顺序。空序列为所有字符串的子序列,任何字符串为其自身的子序列。

输入将是一个字符串列表,输出是最长特殊序列的长度。如果最长特殊序列不存在,返回 -1 。

示例:

代码语言:javascript
复制
输入: "aba", "cdc", "eae"
输出: 3

提示:

  1. 所有给定的字符串长度不会超过 10 。
  2. 给定字符串列表的长度将在 [2, 50 ] 之间。

【思路】

稍微一变,题就变得很难。

还记得【T78-最长特殊序列 Ⅰ】这道题吗?对于两个单词,当单词一样,返回-1;否则,返回他们的最长单词长度。

对于多个单词,只有单词出现次数为1的,才可能满足条件。

但是,并不是简单取最长单词长度就行了。

想一想,当数组为[“aba”, "aba", "ab"],虽然“aba”由于出现次数不为1,不满足条件,“ab”因为是“aba”的子序列,也不满足条件。

因此,还需要判断单词是否为其他单词的子序列。

代码中,按照单词长度进行排序,这样,可以省去很多判断子序列的操作。

【代码】

python版本

代码语言:javascript
复制
def is_subseq(word1, word2):
    k = 
    count = 
    # word2的所有字符是否依次出现在word1中
    for w in word2:
        while k < len(word1) and word1[k] != w:
            k += 
        if k >= len(word1):
            break
        count += 
        k += 
    if count == len(word2):
        return True
    return False

class Solution(object):
    def findLUSlength(self, strs):
        """
        :type strs: List[str]
        :rtype: int
        """
        # 词频统计
        d = {}
        for s in strs:
            d[s] = d.get(s, ) + 
        # 找到最大单词长度,条件是:该单词出现次数为1次,且不是任何单词的子序列
        item = list(d.items())
        item.sort(key=lambda x: (len(x[]), x[]), reverse=True)
        flag = False
        for i in range(len(item)):
            # 只出现1次
            if item[i][] == :
                # 不是其他单词的子序列
                flag = False
                word2 = item[i][]
                for j in range(len(item)):
                    word1 = item[j][]
                    # 单词必须长度更长,才可能有该子序列
                    if len(word1) <= len(word2):
                        break
                    # 判断是否是子序列,如果是,单词word2不可能
                    if is_subseq(word1, word2):
                        flag = True
                        break
                if not flag:
                    return len(item[i][])
        return -1
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木又AI帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档