Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情。
一、题目描述
给你两个字符串 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 <= 100a 和 b 由小写英文字母组成
二、思路分析
众所周知,力扣上,简单题是真简单,中等题有些困难,困难题看不懂答案。
- 题目不长,附加的描述倒是不短,其实都是在限制规则和边界,保证题目要求更加清晰和明确
- 找两个字符串的最长特殊序列,可以理解为:找两个字符串的非公共子串的最大长度
- 理解了题目后,实现起来就很简单了,如果对于题目不够理解,也可以通过给出的示例来不断分析需要的结果,比如使用列举方法:
- 当两个字符串都是空字符串时,都只有空串这一个子串,且相等,返回-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());
}
}
四、总结
春天到了,工作忙起来了,身体要动起来,小算法也要刷起来,大家一起加油!