日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 522. 最长特殊序列 II

發布時間:2024/7/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 522. 最长特殊序列 II 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

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

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

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

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-uncommon-subsequence-ii
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 類似題目:LeetCode 521. 最長特殊序列 Ⅰ

題目意思是,找一個最長的字符,且這個字符不能從別人那里順次挑出(別人的子序,可以隔著字符,不是子串,子串必須連續)
所以有重復的字符串不是答案,從不重復的字符串中,從最長的開始找(先排序),檢查這個最長的字符是不是原字符串集合中的字符串的子序。

class Solution { public:int findLUSlength(vector<string>& strs) {sort(strs.begin(), strs.end(),[&](auto a, auto b){return a.size() > b.size();//按長度排序});map<string,int> m;for(auto it = strs.begin(); it != strs.end(); ++it)m[*it]++;vector<string> uniq;for(auto it = m.begin(); it != m.end(); ++it){if(it->second == 1)//次數一次的收集起來uniq.push_back(it->first);}sort(uniq.begin(), uniq.end(),[&](auto a, auto b){return a.size() > b.size();//按長度排序});for(auto it = uniq.begin(); it != uniq.end(); ++it){if(!subSeq(strs,*it))return it->size();}return -1;}bool subSeq(vector<string> &strs, string& s){int len = s.size(), i, j;bool flag;for(auto it = strs.begin(); *it != s; ++it){ //str是從長到短的flag = true;for(i = 0,j = 0; i < len; ++i,++j){while(j < it->size() && (*it)[j] != s[i])j++;//長字符串中的字符不等if(j == it->size() && i < len){flag = false;//不是子序break;}else if(i == len-1 && j <= it->size()){flag = true;break;}}if(flag)//是子序break;}return flag;} };

總結

以上是生活随笔為你收集整理的LeetCode 522. 最长特殊序列 II的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。