521.最长特殊序列I
给你两个字符串a和b,请返回这两个字符串中最长特殊序列,若不存在则返回-1
最长特殊序列定义如下:该序列为某字符串独有的最长子序列(不能是其他字符串的子序列)
字符串使得子序列是在从s中删除任意数量的字符后可获得的字符串。
- 例如:
"abc"是"aebdc"的子序列,因为您可以删除"aebdc"中的'e'和'd'来得到"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 = "abcdef", b = "abcdefghijk"
输出:11
解释: 最长特殊子序列为“abcdefghijk”,它为b的子序列但不为a的子序列且最长。
解法1:
看见自定义的特殊子序列示例,题意便了然于目。
(1)最长特殊子序列: 字符串a有某子序列但是字符串b没有或者字符串b有某子序列但是字符串a没有,并且该子序列是最长的;
(2)当字符串a与b相等时,a的子序列也必为b的子序列(非特有),返回-1;
(3)当字符串a不等于字符串b时,最长子序列即为较长的字符串(由较长字符串组成的子序列必然不会在较短的字符串中出现),即返回较长字符串的长度即可。
难点: 题意理解。最长特殊序列即为字符串a或者b独有的且长度最长的子序列,并不是字符串a和b最长的公共子序列。
func findLUSLength(a,b string) int {
if a == b {
return -1
}
return max(len(a), len(b))
}
func max(x, y int) int {
if x > y {
return x
}
return y
}