题解 | #最长特殊子序列(二)#

最长特殊子序列(二)

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;
        
          
        
    }
};




全部评论

相关推荐

努力学习的小绵羊:我反倒觉得这种挺好的,给不到我想要的就别浪费大家时间了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务