LeetCode522. 最長特殊序列 II

/**
 *  522. 最長特殊序列 II
 *  給定字符串列表,你需要從它們中找出最長的特殊序列瓤漏。
 *  最長特殊序列定義如下:該序列為某字符串獨有的最長子序列(即不能是其他字符串的子序列)宰衙。
 *  子序列可以通過刪去字符串中的某些字符實現(xiàn)荠呐,但不能改變剩余字符的相對順序。
 *  空序列為所有字符串的子序列匠楚,任何字符串為其自身的子序列良哲。
 *  輸入將是一個字符串列表,輸出是最長特殊序列的長度系任。如果最長特殊序列不存在,返回 -1 虐块。
 *
 *  示例:
 *  輸入: "aba", "cdc", "eae"
 *  輸出: 3
 *
 *  提示:
 *  1俩滥、所有給定的字符串長度不會超過 10 。
 *  2贺奠、給定字符串列表的長度將在 [2, 50 ] 之間霜旧。
 *
 */

/**
 *   方法一:檢查每個字符串
 *   如果存在這樣的特殊序列,那么它一定是某個給定的字符串儡率。
 *   檢查每個字符串是否是其他字符串的子序列挂据。如果不是,則它是一個特殊序列儿普。最后返回長度最大的特殊序列崎逃。如果不存在特殊序列,返回 -1眉孩。
 */
public int findLUSlength(String[] strs) {
    int res = -1;
    for (int i = 0, j; i < strs.length; i++) {
        for (j = 0; j < strs.length; j++) {
            if (j == i)
                continue;
            if (isSubsequence(strs[i], strs[j]))
                break;
        }
        if (j == strs.length)
            res = Math.max(res, strs[i].length());
    }
    return res;
}

public boolean isSubsequence(String s, String t) {
    int j = 0;
    for (int i = 0; j < s.length() && i < t.length(); i++)
        if (s.charAt(j) == t.charAt(i))
            j++;
    return j == s.length();
}

/**
 *   復雜度分析
 *   時間復雜度:O(x*n^2)其中 n是字符串的數(shù)量个绍,x是每個字符串的平均長度。
 *   空間復雜度:O(1)勺像,恒定的額外空間障贸。
 */


/**
 *   方法二:排序+檢查每個字符串
 *   方法一中需要判斷每個字符串是否為特殊序列错森。如果最開始可以先將所有字符串排序吟宦,則可以節(jié)省一部分計算。
 *   本方法中涩维,首先按照長度降序排序所有字符串殃姓。然后,依次使用序列中的每個字符串與其他字符串比較瓦阐,如果不存在字符串是當前字符串的子序列蜗侈,則返回當前字符串的長度。否則返回 -1睡蟋。
 */
public int findLUSlength2(String[] strs) {
    Arrays.sort(strs, new Comparator< String >() {
        public int compare(String s1, String s2) {
            return s2.length() - s1.length();
        }
    });
    for (int i = 0, j; i < strs.length; i++) {
        boolean flag = true;
        for (j = 0; j < strs.length; j++) {
            if (i == j)
                continue;
            if (isSubsequence(strs[i], strs[j])) {
                flag = false;
                break;
            }
        }
        if (flag)
            return strs[i].length();
    }
    return -1;
}

/**
 *   復雜度分析
 *   時間復雜度:O(x*n^2)其中 n 是字符串的數(shù)量踏幻,x 是每個字符串的平均長度。
 *   空間復雜度:O(1)戳杀,恒定的額外空間该面。
 */

更多LeetCode題目解法傳送門

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末夭苗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子隔缀,更是在濱河造成了極大的恐慌题造,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猾瘸,死亡現(xiàn)場離奇詭異界赔,居然都是意外死亡,警方通過查閱死者的電腦和手機牵触,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門淮悼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人揽思,你說我怎么就攤上這事敛惊。” “怎么了绰更?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵瞧挤,是天一觀的道長。 經(jīng)常有香客問我儡湾,道長特恬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任徐钠,我火速辦了婚禮癌刽,結果婚禮上,老公的妹妹穿的比我還像新娘尝丐。我一直安慰自己显拜,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布爹袁。 她就那樣靜靜地躺著远荠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪失息。 梳的紋絲不亂的頭發(fā)上譬淳,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音盹兢,去河邊找鬼邻梆。 笑死,一個胖子當著我的面吹牛绎秒,可吹牛的內容都是我干的浦妄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼剂娄!你這毒婦竟也來了窘问?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤宜咒,失蹤者是張志新(化名)和其女友劉穎惠赫,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體故黑,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡儿咱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了场晶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片混埠。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖诗轻,靈堂內的尸體忽然破棺而出钳宪,到底是詐尸還是另有隱情,我是刑警寧澤扳炬,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布吏颖,位于F島的核電站,受9級特大地震影響恨樟,放射性物質發(fā)生泄漏半醉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一劝术、第九天 我趴在偏房一處隱蔽的房頂上張望缩多。 院中可真熱鬧,春花似錦养晋、人聲如沸衬吆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逊抡。三九已至,卻和暖如春圈纺,著一層夾襖步出監(jiān)牢的瞬間秦忿,已是汗流浹背麦射。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工蛾娶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人潜秋。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓蛔琅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親峻呛。 傳聞我的和親對象是個殘疾皇子罗售,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353