leetcode刷题记录-521. 最长特殊序列 Ⅰ

154 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

前言

今天的题目为简单,单看题目很容易被过长的要求带跑,但是要想到这个是简单题,肯定是有什么快捷的解法,而不是题目要求的复杂计算。

每日一题

今天的每日一题 521. 最长特殊序列 Ⅰ,难度为简单

  • 给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列  。如果不存在,则返回 -1 。

  • 「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列) 。

  • 字符串 s 的子序列是在从 s 中删除任意数量的字符后可以获得的字符串。

  • 例如,"abc" 是 "aebdc" 的子序列,因为删除 "aebdc" 中斜体加粗的字符可以得到 "abc" 。 "aebdc" 的子序列还包括 "aebdc" 、 "aeb" 和 "" (空字符串)。  

示例 1:

输入: a = "aba", b = "cdc"
输出: 3
解释: 最长特殊序列可为 "aba" (或 "cdc"),两者均为自身的子序列且不是对方的子序列。

示例 2:

输入:a = "aaa", b = "bbb"
输出:3
解释: 最长特殊序列是 "aaa""bbb"

示例 3:

输入:a = "aaa", b = "aaa"
输出:-1
解释: 字符串 a 的每个子序列也是字符串 b 的每个子序列。同样,字符串 b 的每个子序列也是字符串 a 的子序列。

提示:

  • 1 <= a.length, b.length <= 100
  • a 和 b 由小写英文字母组成

题解

脑筋急转弯数学题

最开始看到题目有点长,可能会蒙蔽,还会想着怎么去找两个字符串的子序列然后对比是否相同,但是这道题其实只是很简单的脑筋急转弯的题目,我们完全不需要去求两个输入字符串的子序列,因为题目要求是最长的不包含在对方子序列中的子序列,这里就要涉及之前做过的一个概念,什么是子序列,还有它和子串有什么区别

子序列

  • 「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。

子串

  • 「子串」定义:一个字符串中,任意 连续 的字符构成的子字符串称为子串。

由此我们可以得知,子序列,是包含这个数本身在内的那么对于字符串 a 和 b 来说,他们子序列中最长的,不就是他们本身吗,那么我们就只需要去判断,两个字符串中,谁更长一点,那么最长的子序列不就找到了吗。

并且题目要求要不相同,那么两个字符串只有在相等的情况下才会相同,两个字符串都相等了,那么他们的所以子序列也一定是找不出来不同的。

所以由上我们就可以很轻松的解出这道题,只要判断两个字符串是否相等,不相等就输出长一点的那个一个的长度,相等的话那就是不存在这样的子序列。

/**
 * @param {string} a
 * @param {string} b
 * @return {number}
 */
 var findLUSlength = function(a, b) {
    if(a === b)
        return -1;
    return a.length > b.length ? a.length : b.length;
};

image.png