/**
* 522. 最長特殊序列 ii
* 給定字串列表,你需要從它們中找出最長的特殊序列。
* 最長特殊序列定義如下:該序列為某字串獨有的最長子序列(即不能是其他字串的子串行)。
* 子串行可以通過刪去字串中的某些字元實現,但不能改變剩餘字元的相對順序。
* 空串行為所有字串的子串行,任何字串為其自身的子串行。
* 輸入將是乙個字串列表,輸出是最長特殊序列的長度。如果最長特殊序列不存在,返回 -1 。
** 示例:
* 輸入: "aba", "cdc", "eae"
* 輸出: 3
** 1、所有給定的字串長度不會超過 10 。
* 2、給定字串列表的長度將在 [2, 50 ] 之間。
**/
/**
* 方法一:檢查每個字串
* 如果存在這樣的特殊序列,那麼它一定是某個給定的字串。
* 檢查每個字串是否是其他字串的子串行。如果不是,則它是乙個特殊序列。最後返回長度最大的特殊序列。如果不存在特殊序列,返回 -1。
*/
public
intfindluslength
(string[
] strs)
if(j == strs.length)
res = math.
max(res, strs[i]
.length()
);}return res;
}public
boolean
issubsequence
(string s, string t)
/**
* 複雜度分析
* 時間複雜度:o(x*n^2)其中 n是字串的數量,x是每個字串的平均長度。
* 空間複雜度:o(1),恆定的額外空間。
*/
/**
* 方法二:排序+檢查每個字串
* 方法一中需要判斷每個字串是否為特殊序列。如果最開始可以先將所有字串排序,則可以節省一部分計算。
* 本方法中,首先按照長度降序排序所有字串。然後,依次使用序列中的每個字串與其他字串比較,如果不存在字串是當前字串的子串行,則返回當前字串的長度。否則返回 -1。
*/
public
intfindluslength2
(string[
] strs)})
;for
(int i =
0, j; i < strs.length; i++)}
if(flag)
return strs[i]
.length()
;}return-1
;}/** * 複雜度分析
* 時間複雜度:o(x*n^2)其中 n 是字串的數量,x 是每個字串的平均長度。
* 空間複雜度:o(1),恆定的額外空間。
*/
更多leetcode題目解法傳送門 LeetCode 522 最長特殊序列 II
給定字串列表,你需要從它們中找出最長的特殊序列。最長特殊序列定義如下 該序列為某字串獨有的最長子序列 即不能是其他字串的子串行 子串行可以通過刪去字串中的某些字元實現,但不能改變剩餘字元的相對順序。空串行為所有字串的子串行,任何字串為其自身的子串行。輸入將是乙個字串列表,輸出是最長特殊序列的長度。如...
LeetCode522 最長特殊序列 II
可以將字串陣列按照長度從大到小進行排序,然後從前往後遍歷,找到第乙個特殊序列,這個特殊序列的長度就是答案,如果遍歷完陣列,都沒有找到特殊序列,這返回 1。特殊序列的判斷方法如下 1 如果這個字串存在和它相同的字串 排序後這兩個字串是相鄰的 則這個字串不是特殊序列。2 從最開始 長度最長的 字串列舉到...
LeetCode 521 最長特殊序列
給你兩個字串,請你從這兩個字串中找出最長的特殊序列。最長特殊序列 定義如下 該序列為某字串獨有的最長子序列 即不能是其他字串的子串行 子串行 可以通過刪去字串中的某些字元實現,但不能改變剩餘字元的相對順序。空串行為所有字串的子串行,任何字串為其自身的子串行。輸入為兩個字串,輸出最長特殊序列的長度。如...