侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

LeetCode 720. 词典中最长的单词

Hope
2022-03-17 / 0 评论 / 0 点赞 / 344 阅读 / 701 字
温馨提示:
本文最后更新于 2022-03-17,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

LeetCode 720. 词典中最长的单词

思路:

这道题应该是mid难度,dfs搜索,建立一个树。

代码:

const int N = 30010;
class Solution {
public:

    int son[N][26];
    int ids[N];
    int idx = 0;

    void insert(string &word,int id){
        int p = 0;
        for(int i = 0;i < word.size();i++){
            auto t = word[i] - 'a';
            if(!son[p][t]) son[p][t] = ++idx;
            p = son[p][t]; 
        }
        ids[p] = id;
    }

    string longestWord(vector<string>& words) {
        memset(ids,-1,sizeof ids);
        memset(son,0,sizeof son);

        for(int i = 0;i < words.size();i++){
            insert(words[i],i);
        }
        //len id
        auto t = dfs(0,0);
        if(t[1] != -1) return words[t[1]];
        return "";
    }

    vector<int> dfs(int len,int p){
        vector<int> res{len,ids[p]};

        for(int i = 0;i < 26;i++){
            int j = son[p][i];
            //存在这个儿子 而且在words中也存在
            if(j && ids[j] != -1){
                auto t = dfs(len + 1,j);
                if(res[0] < t[0]) res = t;
            }
        }
        return res;
    }
};
0

评论区