522. 最长特殊序列 II(枚举法)

98 阅读3分钟

image.jpeg

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

    image.png

  • 题目示例

    image.png

  • 题目解析

    • 2 <= strs.length <= 50
    • 1 <= strs[i].length <= 10
    • strs[i] 只包含小写英文字母

二、思路分析:

我们今天拿到本题是 leetcode 难度为中等题 522. 最长特殊序列 II。根据题目要求在数组中找出最长特殊的序列元素,并返回其长度。什么是最长特殊序列?还记得在四月我们做过最长特殊序列I中只对两个字符串进行判断特殊序列,要脑筋急转弯一下,只需要判断两个字符串是否一样,不一样时,则返回最大长度的字符串

回到本题,题目给出的是一组字符串序列,需要在序列中找出最长特殊序列的长度:

  • 特序字符串具有特点:该字符串除了自身外不是其他字符串的子串
  • 比如字符串strs[2],在["a","ab","abc"]中就是特殊字符串,因为它不是"a","ab"的子串
  • 本题的结果:需要返回最长的特殊的字符串长度

因此本题解答时,我们可以使用枚举模拟方法进行解答,思路如下:

  • 方法:枚举模拟法

    • 本题需要对strs数组中所有元素进行两两判断是否是其的子串
    • 因此我们需要定义一个局部函数isSub(s,t)来判断t是否是s的子串
    • 子串判断依据是:字符串s与字符串t每一个字符进行比较,当s中字符与t中相等时,则定义的指针index_t+1,直到遍历完字符串s.
    • 当index_t等于len(t)的长度时,则t是字符串s的子串,否则就不是
    • 在strs字符串比较所有元素,则需要两个for循环,第一层循环取出字符串strs[i]
    • 第二层for循环,则将strs[i]在strs中除了自身元素外其他元素字符串进行比较是否是str[j]的子串
    • 如果是,则退出第二层循环,继续取下一元素字符串进行计算。如果不是,则ans的结果更新为max(ans,len(strs[i])
    • 直到第一层for循环取完strs所有元素,返回ans结果
    class Solution(object):
        def findLUSlength(self, strs):
            """
            :type strs: List[str]
            :rtype: int
            """
            def isSub(s,t):
                index_t = 0
                for i in range(len(s)):
                    if index_t < len(t) and s[i]==t[index_t]:
                        index_t +=1
                return index_t == len(t)
            ans = -1
            for i in range(len(strs)):
                flag = True
                for j in range(len(strs)):
                    if i != j and isSub(strs[j],strs[i]):
                        flag = False
                        break
                if flag:ans = max(ans,len(strs[i]))
            return ans
    

三、总结:

本题考察对特殊字符串的概念的理解和判断,判断字符串t是否是另外一个字符串s的子串需要对字符串s与字符串t每一个元素与进行比较,直到遍历完成后,临时变量index值与字符串t进行比较.相等则是字符t是字符串s的子串。在本题中需要找出最长的除了自身外不是其他元素的子串的字符串长度。AC提交记录如下:

image.png

  • 时间复杂度:O(n^2*l),n为strs数组长度,l为字符串长度
  • 空间复杂度:O(1),没有使用额外空间

以上是本期内容,欢迎大佬们点赞评论,下期见~~~