zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 720 词典中最长的单词(字典树)

    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]。

    class Solution {
         class Node{
            String val;
            Node[] next;
            Node(){
                val=null;
                next=new Node[26];
            }
        }
        Node root;
        String res;
        //建树
        private void build(String[] words){
            for(String word:words)
                buildTrie(word.toCharArray(),0,root);
        }
        private void buildTrie(char[] word,int pos,Node cur){
            if(cur.next[word[pos]-'a']==null)
                cur.next[word[pos]-'a']=new Node();
            cur=cur.next[word[pos]-'a'];
            if(pos+1==word.length){
                cur.val=new String(word);
                return;
            }
            buildTrie(word,pos+1,cur);    
        }
        //查找树
        private void preorder(Node cur){
            if(cur.val.length()>res.length())
                res=cur.val;
            for(int i=0;i<26;i++)
                if(cur.next[i]!=null&&cur.next[i].val!=null)
                    preorder(cur.next[i]);
            // if(cur!=null){
            //     System.out.println(cur.val);
            //     for(int i=0;i<26;i++)
            //     preorder(cur.next[i]);
            // }
        }
        public String longestWord(String[] words) {
            root=new Node();
            root.val="";
            res="";
            build(words);
            preorder(root);
            return res;
        }
    }
    
  • 相关阅读:
    php中 global 和$GLOBALS有何不同
    perl 使用LDAP模块
    Sqlite和SQLCE在Windows Mobile 6上的性能对比
    Silverlight学习点滴系列(二)
    C#的新特性:自动属性,对象初始化器,和集合初始化器(转载)
    Silverlight学习点滴系列(一)
    Silverlight学习点滴系列(三)
    URL中传递中文参数 以流形式文件上传下载 演变
    C#经典面试题及答案
    C#笔试题目(综合版样题) (转载)
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13074755.html
Copyright © 2011-2022 走看看