题解 | #最长特殊子序列(二)#
最长特殊子序列(二)
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;
}
};
