1. 程式人生 > 其它 >LeetCode 521——最長特殊序列 I

LeetCode 521——最長特殊序列 I

技術標籤:LeetCode刷題

一、題目介紹

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

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

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

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

示例 1:

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

輸入:a = "aaa", b = "bbb"
輸出:3
示例 3:

輸入:a = "aaa", b = "aaa"
輸出:-1


提示:

兩個字串長度均處於區間[1 - 100] 。
字串中的字元僅含有'a'~'z' 。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/longest-uncommon-subsequence-i
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

二、解題思路

本題不能按照暴力解法的思路去解決問題,要分析問題找到規律。分為以下三種情況:

(1)如果輸入的字串a和字串b相等,則返回-1。

(2)如果輸入的字串a和字串b不等,但兩個字串的長度相等,則其中任意一個字串,肯定無法在另一個串中找到子串。此時返回a.size()(或者b.size())。

(3)如果輸入的字串a和字串b不等,且兩個字串的長度也不等,則選擇長度更長的字串為特殊序列,因為短字串中肯定無法包含長字串,因此返回max(a.size(), b.size())。

三、解題程式碼

class Solution {
public:
    int findLUSlength(string a, string b) {
        if(a == b)
            return -1;
        if(a.size() != b.size()) //長度不等時,短字串中肯定無法找到長字串
            return max(a.size(), b.size());
        else  //a不等於b,且a和b的長度不等
            return a.size();
    }
};

四、解題結果