0521. 最长特殊序列 Ⅰ【简单】
1. 📝 题目描述
给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列 的长度。如果不存在,则返回 -1。
「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列)。
子序列 是可以通过从另一个数组删除或不删除某些元素,但不更改其余元素的顺序得到的数组。
字符串 s 的子序列是在从 s 中删除任意数量的字符后可以获得的字符串。
- 例如,
"abc"是"aebdc"的子序列,因为删除"aebdc"中的e、d字符可以得到"abc"。"aebdc"的子序列还包括"aebdc"、"aeb"和""(空字符串)。
示例 1:
txt
输入: a = "aba", b = "cdc"
输出: 3
解释:
最长特殊序列可为 "aba" (或 "cdc"),两者均为自身的子序列且不是对方的子序列。1
2
3
4
5
2
3
4
5
示例 2:
txt
输入:a = "aaa", b = "bbb"
输出:3
解释:
最长特殊序列是 "aaa" 和 "bbb"。1
2
3
4
5
2
3
4
5
示例 3:
txt
输入:a = "aaa", b = "aaa"
输出:-1
解释:
字符串 a 的每个子序列也是字符串 b 的每个子序列。
同样,字符串 b 的每个子序列也是字符串 a 的子序列。1
2
3
4
5
6
2
3
4
5
6
提示:
1 <= a.length, b.length <= 100a和b由小写英文字母组成
2. 🎯 s.1 - 暴力解法
js
/**
* @param {string} a
* @param {string} b
* @return {number}
*/
var findLUSlength = function (a, b) {
// 如果两个字符串相等,则不存在特殊序列
if (a === b) {
return -1
}
// 如果两个字符串不相等,则较长字符串的长度就是答案
return Math.max(a.length, b.length)
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
- 时间复杂度:
,其中 和 分别是字符串a和b的长度,主要消耗在字符串比较上 - 空间复杂度:
,只使用了常数级别的额外空间 - 算法思路:
- 相等字符串处理:
- 当 a === b 时,两个字符串完全相同
- 任意一个字符串的子序列也必然是另一个字符串的子序列
- 因此不存在"特殊序列",返回 -1
- 不等字符串处理:
- 当 a !== b 时,两个字符串不相同
- 字符串 a 本身不可能是 b 的子序列(因为它们不相等)
- 字符串 b 本身不可能是 a 的子序列(因为它们不相等)
- 因此,两个字符串本身就是各自的特殊序列
- 返回较长字符串的长度作为最长特殊序列的长度
- 相等字符串处理:
- 这道题的关键在于理解"特殊序列"的定义,一旦理解了题意,解法就变得非常简单。