LeetCode刷題 521 最長特殊序列

2021-10-13 20:54:00 字數 1372 閱讀 1105

給你兩個字串,請你從這兩個字串中找出最長的特殊序列。

「最長特殊序列」定義如下:該序列為某字串獨有的最長子序列(即不能是其他字串的子串行)。

子串行可以通過刪去字串中的某些字元實現,但不能改變剩餘字元的相對順序。空串行為所有字串的子串行,任何字串為其自身的子串行。

輸入為兩個字串,輸出最長特殊序列的長度。如果不存在,則返回 -1。

示例 1:

輸入:"aba", "cdc"

輸出:3

解釋:最長特殊序列可為 "aba" (或 "cdc"),兩者均為自身的子串行且不是對方的子串行。

示例 2:

輸入:a = "aaa", b = "bbb"

輸出:3

示例 3:

輸入:a = "aaa", b = "aaa"

輸出:-1

兩個字串長度均處於區間[1 - 100]

字串中的字元僅含有'a'~'z'

分析:這題真的可以

字串 aa 和 bb 共有 3 種情況:

(1)a=b。如果兩個字串相同,則沒有特殊子串行,返回 -1。

(2)length(a)=length(b) 且 a ≠ b。例如:abcabc 和 abdabd。這種情況下,乙個字串一定不會是另外乙個字串的子串行,因此可以將任意乙個字串看作是特殊子串行,返回 length(a)length(a) 或 length(b)length(b)。

(3)length(a) ≠ length(b)。例如:abcdabcd 和 abcabc。這種情況下,長的字串一定不會是短字串的子串行,因此可以將長字串看作是特殊子串行,返回 max(length(a),length(b))max(length(a),length(b))。

來自:

int max(int a,int b)

int findluslength(char * a, char * b)

return max(strlen(a),strlen(b));

}

參考:

leetcode每日一題5 21最長回文字串

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 思路 emmmmmm這題我之前寫過了,就不過多敘述了。class solution boolean d...

LeetCode 521 最長特殊序列

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

LeetCode 521 最長特殊序列

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