LeetCode 522 最長特殊序列 II

2021-10-06 04:41:24 字數 1615 閱讀 7209

/**

* 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 最長特殊序列

給你兩個字串,請你從這兩個字串中找出最長的特殊序列。最長特殊序列 定義如下 該序列為某字串獨有的最長子序列 即不能是其他字串的子串行 子串行 可以通過刪去字串中的某些字元實現,但不能改變剩餘字元的相對順序。空串行為所有字串的子串行,任何字串為其自身的子串行。輸入為兩個字串,輸出最長特殊序列的長度。如...