1. 程式人生 > >[Leetcode] 521. 最長特殊序列 Ⅰ

[Leetcode] 521. 最長特殊序列 Ⅰ

題目描述:

給定兩個字串,你需要從這兩個字串中找出最長的特殊序列。最長特殊序列定義如下:該序列為某字串獨有的最長子序列(即不能是其他字串的子序列)。

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

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

示例 :

輸入: "aba", "cdc"
輸出: 3
解析: 最長特殊序列可為 "aba" (或 "cdc")

說明:

  1. 兩個字串長度均小於100。
  2. 字串中的字元僅含有 'a'~'z'。

解題思路:

這個題目一看上去晦澀難懂,根本不知道在說啥,其實意思就是說,給你倆個字串,讓你看看這兩個字串中最長的不能由另外一個字串刪掉某些字元實現的字串是什麼,返回這個最長的長度。

其實你這樣想:

如果兩個字串A和B,如果A比B的長度大,那麼A肯定不能由B刪除某些字元得到啊,那麼A的長度肯定就是這個最大長度了。

其次,如果A和B等長的話,看他們是不是相等的,如果相等的那麼一個字串肯定能由另外一個字串不用刪除都等得到啊。

最後如果A和B等長並且他們還不相等,那麼其中字串A肯定就不能由字串B刪除字元之後得到,因為人家本來長度都相等了,你再刪除肯定短了嘛,不可能再相等了。

程式碼實現(Java語言):

class Solution {
    public int findLUSlength(String a, String b) {
        int lenA = a.length();
        int lenB = b.length();
        if(lenA != lenB)
            return Math.max(lenA,lenB);
        else{
            if(a.equals(b))
                return -1;
            else
                return lenA;
        }
    }
}