<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實(shí)戰(zhàn)522:最長特殊序列 II

          共 2836字,需瀏覽 6分鐘

           ·

          2022-02-12 06:16

          算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問題叫做?最長特殊序列 II,我們先來看題面:
          https://leetcode-cn.com/problems/longest-uncommon-subsequence-ii/

          Given an array of strings strs, return the length of the longest uncommon subsequence between them. If the longest uncommon subsequence does not exist, return -1.


          An uncommon subsequence between an array of strings is a string that is a subsequence of one string but not the others.


          A subsequence of a string s is a string that can be obtained after deleting any number of characters from s.


          For example, "abc" is a subsequence of "aebdc" because you can delete the underlined characters in "aebdc" to get "abc". Other subsequences of "aebdc" include "aebdc", "aeb", and "" (empty string).


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

          子序列可以通過刪去字符串中的某些字符實(shí)現(xiàn),但不能改變剩余字符的相對(duì)順序。空序列為所有字符串的子序列,任何字符串為其自身的子序列。

          輸入將是一個(gè)字符串列表,輸出是最長特殊序列的長度。如果最長特殊序列不存在,返回 -1 。

          示例? ? ? ? ? ? ? ? ? ? ? ? ?

          示例:
          輸入: "aba", "cdc", "eae"
          輸出: 3

          提示:
          所有給定的字符串長度不會(huì)超過 10?。
          給定字符串列表的長度將在 [2, 50?] 之間。


          解題

          https://www.cnblogs.com/linrj/p/13972685.html

          可以將字符串?dāng)?shù)組按照長度從大到小進(jìn)行排序,然后從前往后遍歷,找到第一個(gè)特殊序列,這個(gè)特殊序列的長度就是答案,如果遍歷完數(shù)組,都沒有找到特殊序列,這返回-1。

          特殊序列的判斷方法如下:
          (1)如果這個(gè)字符串存在和它相同的字符串(排序后這兩個(gè)字符串是相鄰的),則這個(gè)字符串不是特殊序列。

          (2)從最開始(長度最長的)字符串枚舉到這個(gè)字符串之前的字符串(也就是枚舉所有長度比當(dāng)前字符串大的字符串),判斷當(dāng)前這個(gè)字符串是不是其他字符串的子序列,如果是,則它不是特殊序列;如果不是,則當(dāng)前這個(gè)字符串的長度就是最長特殊序列的長度。

          代碼如下:

          class?Solution?{
          public:
          ????bool?checkSubSeq(string?a, string?b)?{ // 判斷字符串a(chǎn)是否是字符串b的子序列
          ????????for(int?i = 0, j = 0; i < a.size(); ++i, ++j) {
          ????????????while(j < b.size() && a[i] != b[j]) {
          ????????????????++j;
          ????????????}
          ????????????if(j == b.size()) { // 如果b走到最后也沒有和a匹配完,那么a不是b的子序列
          ????????????????return?false;
          ????????????}
          ????????}
          ????????return?true;
          ????}

          ????int?findLUSlength(vector<string>& strs)?{
          ????????sort(strs.begin(), strs.end(), [&](string?a, string?b) { // 將字符串?dāng)?shù)組按照字符串長度從大到小排序
          ????????????if(a.size() != b.size()) {
          ????????????????return?a.size() > b.size();
          ????????????}
          ????????????return?a < b;
          ????????});
          ????????for(int?i = 0; i < strs.size(); ++i) { // 按照字符串長度從大到小枚舉所有的字符串
          ????????????bool?flag = true; // flag表示當(dāng)前字符串是否是一個(gè)特殊序列
          ????????????if(i + 1?< strs.size() && strs[i] == strs[i + 1]) { // 如果存在和這個(gè)字符串相同的字符串,則這個(gè)字符串不是特殊序列
          ????????????????flag = false;
          ????????????????continue;
          ????????????}
          ????????????for(int?j = 0; j < i; ++j) { // 枚舉所有長度比當(dāng)前字符串大的字符串,判斷當(dāng)前字符串是否是其他字符串的子序列
          ????????????????if(checkSubSeq(strs[i], strs[j]) == true) {
          ????????????????????flag = false;
          ????????????????}
          ????????????}
          ????????????if(flag == true) { // 找到了一個(gè)特殊序列,它的長度就是答案
          ????????????????return?strs[i].size();
          ????????????}
          ????????}
          ????????return?-1;
          ????}
          };


          好了,今天的文章就到這里,如果覺得有所收獲,請(qǐng)順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力 。

          上期推文:
          LeetCode1-520題匯總,希望對(duì)你有點(diǎn)幫助!
          LeetCode刷題實(shí)戰(zhàn)521: 最長特殊序列 Ⅰ

          瀏覽 34
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91久久爽久久爽爽久久片 | 日韩精品免费看 | 欧美成人一区二区三区在线视频 | 丁香五月婷婷久久 | 超碰手机免费公开在线 |