1. 题目

给出一个字符串数组words组成的一本英语词典。从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成。若其中有多个可行的答案,则返回答案中字典序最小的单词。

若无答案,则返回空字符串。

示例 1:
输入:
words = ["w","wo","wor","worl", "world"]
输出: "world"
解释:
单词"world"可由"w", "wo", "wor", 和 "worl"添加一个字母组成。示例 2:
输入:
words = ["a", "banana", "app", "appl", "ap", "apply", "apple"]
输出: "apple"
解释:
"apply"和"apple"都能由词典中的单词组成。但是"apple"得字典序小于"apply"。注意:
所有输入的字符串都只包含小写字母。
words数组长度范围为[1,1000]。
words[i]的长度范围为[1,30]。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-word-in-dictionary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. Trie树解题

题目意思:从1个字母开始,每次增加一个字母(包含原始字母在内的每一步组成的单词都必须在字典中找的到),最终形成的最长单词是谁

  • 对所有的单词,插入Trie树
  • 对每个 root->next[i] i=[0,26),进行dfs搜索查找最长的单词

Trie树结构参考

class Trie//Trie节点
{public:bool isWord;Trie* next[26] = {NULL};Trie():isWord(false){}
};class Solution {string ans;
public:string longestWord(vector<string>& words) {Trie *root = new Trie();Trie *cur;for(string str : words)//遍历所有单词{cur = root;for(char ch : str)//遍历所有字符{if(cur->next[ch-'a'] == NULL)cur->next[ch-'a'] = new Trie();cur = cur->next[ch-'a'];}cur->isWord = true;//单词结束标志}string temp;cur = root;int i, j;for(i = 0; i < 26; ++i){temp = "";if(cur->next[i] && cur->next[i]->isWord)//对每个点dfs    dfs(cur->next[i], temp, i);}return ans;}void dfs(Trie* root, string &temp, int i){if(!root)return;if(root->isWord)//是结束标志,在字典中{temp.push_back(i+'a');//加入该字符if(temp.size() > ans.size())ans = temp;//更新更长的单词for(int j = 0; j < 26; ++j)dfs(root->next[j],temp,j);//dfs下一个字符temp.pop_back();//回溯}}
};

LeetCode 720. 词典中最长的单词(Trie树)相关推荐

  1. LeetCode 720. 词典中最长的单词

    目录结构 1.题目 2.题解 1.题目 给出一个字符串数组words组成的一本英语词典.从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成.若其中有多个可行的答案,则返回答 ...

  2. 2022-1-22 Leetcode 720.词典中最长的单词

    这个方法对于数据量小的可行,大量的数据不可行 class Solution {public:string longestWord(vector<string>& words) {s ...

  3. 字典树/Trie/前缀树-LeetCode总结:720词典中最长的单词;127. 单词接龙;677. 键值映射;面试题 17.17. 多次搜索;648. 单词替换

    MyTrie结构体和相关操作函数 typedef struct MyTrie {bool is_word;vector<MyTrie*> next;MyTrie():is_word(fal ...

  4. 720. 词典中最长的单词

    链接:720. 词典中最长的单词 题解: class Solution { private:struct Trie {int end;std::set<std::string> words ...

  5. 【LeetCode】720. 词典中最长的单词 【前缀树】

    题目链接:https://leetcode-cn.com/problems/longest-word-in-dictionary/ 题目描述 给出一个字符串数组words组成的一本英语词典.从中找出最 ...

  6. 720 词典中最长的单词(Trie树)

    1. 问题描述: 给出一个字符串数组words组成的一本英语词典.从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成.若其中有多个可行的答案,则返回答案中字典序最小的单词. ...

  7. 【LeetCode】词典中最长的单词(附集合操作、lamda用法)

    题目描述 给出一个字符串数组 words 组成的一本英语词典.返回 words 中最长的一个单词,该单词是由 words 词典中其他单词逐步添加一个字母组成. 若其中有多个可行的答案,则返回答案中字典 ...

  8. leetcode 720. Longest Word in Dictionary | 720. 词典中最长的单词(Trie前缀树)

    题目 https://leetcode.com/problems/longest-word-in-dictionary/ 题解 建立一个 Trie,在 insert 的过程中,除最后一个节点外,如果一 ...

  9. 每日一练 LeetCode:E720. 词典中最长的单词

    题目 给出一个字符串数组 words 组成的一本英语词典.返回 words 中最长的一个单词,该单词是由 words 词典中其他单词逐步添加一个字母组成. 若其中有多个可行的答案,则返回答案中字典序最 ...

最新文章

  1. javamail 收邮件并解析附件
  2. SQL Server 安装好后 Always On群组配置
  3. vue create()获取ref_vue-next+typescript 初体验
  4. 【Git】Git解决文件本地更改的合并覆盖错误
  5. 剑指offer——5.替换空格
  6. pytorch 入门学习多分类问题-9
  7. 清空缓存的命令_布隆过滤器应用——解决Redis缓存穿透问题
  8. snipaste截长图
  9. 我们短暂的人类世和即将到来的算法世
  10. 应用统计学与计算机论文,浅谈统计学在生活中的应用
  11. matlab 并联机械臂_MATLAB机械臂的两种路径规划
  12. 4.2-软件开发中,“思维导图”的作用与绘制方法介绍
  13. 守望先锋:源氏跑酷之球图制作分享
  14. msconfig蓝屏_电脑设置MSConfig后重启就蓝屏,然后又自动重启,一直循环。。。怎么办啊啊啊啊啊啊...
  15. 从深圳流水线女工到美国谷歌程序员-一位女孩的奋斗史诗
  16. android jni 读写sd卡,Android NDK的使用实例——增量更新实战
  17. java面试题集汇总
  18. win10家庭版升级专业版
  19. Prolog学习:用八卦的精神走进Prolog
  20. Win7的资源管理器打不开

热门文章

  1. P2237 [USACO14FEB]自动完成Auto-complete
  2. java线程池,信号量使用demo
  3. Redis Java调用
  4. 【Ubuntu】ubuntu系统下python3和python2环境自由切换
  5. SQL-ALTER-change和modify区别
  6. vim粘贴板和系统粘贴板的共享(linux)
  7. memmove()/mmecpy()
  8. redis源码之main()函数剖析
  9. 由c语言转向c++,我们需要做什么?
  10. 书中自有黄金屋~外加中奖结果通知