题解 | #最长特殊子序列(二)#
最长特殊子序列(二)
https://www.nowcoder.com/practice/27f32e4548644ec9a8ee6251d7de30bd
排序+哈希容器
bool cmp(const string &a,const string &b){ return a.size()>b.size(); } class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param strs string字符串vector * @return int整型 */ bool findsub(const string& s,const string& t){ int i=0; while(i<t.size()&&s[i]==t[i])++i; if(i!=t.size())return false; return true; } int longestUniqueSubsequence(vector<string>& strs) { // write code here sort(strs.begin(),strs.end(),cmp); int slen=strs[0].size(),n=strs.size(); vector<unordered_map<string, int>> mp(slen+1); for(int i=0;i<n;++i){ mp[strs[i].size()][strs[i]]=i; } for(int i=0;i<n;++i){ if(mp[strs[i].size()][strs[i]]==i){ int j=i-1; for(;j>=0;--j){ if(findsub(strs[j],strs[i])){ break; } } if(j<0)return strs[i].size(); } else{ mp[strs[i].size()][strs[i]]=-1; } } return -1; } };