每日一题 521. 最长特殊序列 Ⅰ

126 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情

一、题目描述

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

  1. 「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列) 。
  2. 字符串 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 由小写英文字母组成

二、思路分析

众所周知,力扣上,简单题是真简单,中等题有些困难,困难题看不懂答案。

  1. 题目不长,附加的描述倒是不短,其实都是在限制规则和边界,保证题目要求更加清晰和明确
  2. 找两个字符串的最长特殊序列,可以理解为:找两个字符串的非公共子串的最大长度
  3. 理解了题目后,实现起来就很简单了,如果对于题目不够理解,也可以通过给出的示例来不断分析需要的结果,比如使用列举方法:
    • 当两个字符串都是空字符串时,都只有空串这一个子串,且相等,返回-1
    • 当其中一个是空串时,那么另一个字符串本身就是独有的最长子串,返回本身长度
    • 当两者都不为空串时,相等则返回-1,不相等则返回更长字符串的长度
    • 最后发现,前两种情况包含在第三种情况内,因此只需要判断两个字符串是否相等即可

三、AC 代码

class Solution {
    public int findLUSlength(String a, String b) {
        return a.equals(b) ? -1 : (a.length() > b.length() ? a.length() : b.length());
    }
}

image.png

四、总结

春天到了,工作忙起来了,身体要动起来,小算法也要刷起来,大家一起加油!