1. 程式人生 > 其它 >【LeetCode刷題】521. 最長特殊序列 Ⅰ

【LeetCode刷題】521. 最長特殊序列 Ⅰ

技術標籤:刷題字串leetcode演算法

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

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

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

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

示例 1:

輸入: "aba", "cdc"

輸出: 3

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

示例 2:

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

輸出:3

示例 3:

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

輸出:-1

提示:

  1. 兩個字串長度均處於區間[1 - 100]
  2. 字串中的字元僅含有'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))。

來自:https://leetcode-cn.com/problems/longest-uncommon-subsequence-i/solution/zui-chang-te-shu-xu-lie-i-by-leetcode/

int max(int a,int b)
{
    return a>b?a:b;
}

int findLUSlength(char * a, char * b){
    if(strcmp(a,b)==0)
    {
        return -1;
    }
    return max(strlen(a),strlen(b));
}

參考:https://leetcode-cn.com/problems/longest-uncommon-subsequence-i/