Java实现 LeetCode 720 词典中最长的单词(字典树)

小灰灰 2023-07-24 03:28 94阅读 0赞

720. 词典中最长的单词

给出一个字符串数组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]。

  1. class Solution {
  2. class Node{
  3. String val;
  4. Node[] next;
  5. Node(){
  6. val=null;
  7. next=new Node[26];
  8. }
  9. }
  10. Node root;
  11. String res;
  12. //建树
  13. private void build(String[] words){
  14. for(String word:words)
  15. buildTrie(word.toCharArray(),0,root);
  16. }
  17. private void buildTrie(char[] word,int pos,Node cur){
  18. if(cur.next[word[pos]-'a']==null)
  19. cur.next[word[pos]-'a']=new Node();
  20. cur=cur.next[word[pos]-'a'];
  21. if(pos+1==word.length){
  22. cur.val=new String(word);
  23. return;
  24. }
  25. buildTrie(word,pos+1,cur);
  26. }
  27. //查找树
  28. private void preorder(Node cur){
  29. if(cur.val.length()>res.length())
  30. res=cur.val;
  31. for(int i=0;i<26;i++)
  32. if(cur.next[i]!=null&&cur.next[i].val!=null)
  33. preorder(cur.next[i]);
  34. // if(cur!=null){
  35. // System.out.println(cur.val);
  36. // for(int i=0;i<26;i++)
  37. // preorder(cur.next[i]);
  38. // }
  39. }
  40. public String longestWord(String[] words) {
  41. root=new Node();
  42. root.val="";
  43. res="";
  44. build(words);
  45. preorder(root);
  46. return res;
  47. }
  48. }

发表评论

表情:
评论列表 (有 0 条评论,94人围观)

还没有评论,来说两句吧...

相关阅读

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

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

    相关 720. 词典单词

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

    相关 Java 单词

    编写一个函数,输入一行字符,将此字符串中最长的单词输出。   输入仅一行,多个单词,每个单词间用一个空格隔开。单词仅由小写字母组成。所有单词的长度和不超过100000。如有