• (medium)LeetCode .Implement Trie (Prefix Tree)


    Implement a trie with insertsearch, and startsWith methods.

    Note:
    You may assume that all inputs are consist of lowercase letters a-z.

    思路:实现单词查找树,它是一种树形结构;用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。每个节点有26个从节点。isEndOfWord,children,两个关键变量。

    代码如下:

    class TrieNode {
        // Initialize your data structure here.
        boolean isEndOfWord;
        TrieNode[] children;
        public TrieNode() {
            this.isEndOfWord=false;
            this.children=new TrieNode[26];
        }
        
    }
    
    public class Trie {
        private TrieNode root;
    
        public Trie() {
            root = new TrieNode();
        }
    
        // Inserts a word into the trie.
        public void insert(String word) {
            TrieNode runner=root;
            for(char c:word.toCharArray()){
                if(runner.children[c-'a']==null){
                    runner.children[c-'a']=new TrieNode();
                }
                runner=runner.children[c-'a'];
            }
            runner.isEndOfWord=true;
        }
    
        // Returns if the word is in the trie.
        public boolean search(String word) {
           TrieNode runner=root;
           for(char c:word.toCharArray()){
               if(runner.children[c-'a']==null){
                   return false;
               }else{
                   runner=runner.children[c-'a'];
               }
           }
           return runner.isEndOfWord;
        }
    
        // Returns if there is any word in the trie
        // that starts with the given prefix.
        public boolean startsWith(String prefix) {
            TrieNode runner=root;
            for(char c:prefix.toCharArray()){
                if(runner.children[c-'a']==null){
                    return false;
                }else{
                    runner=runner.children[c-'a'];
                }
            }
            return true;
        }
    }
    
    // Your Trie object will be instantiated and called as such:
    // Trie trie = new Trie();
    // trie.insert("somestring");
    // trie.search("key");
    

      运行结果:

      

  • 相关阅读:
    著名的二分查找的BUG
    C/C++ static用法
    浅谈C++虚函数
    git备忘(长久更新)
    【经典问题】最大子串和
    水波纹效果
    博客迁址 xpeng.scorpionstudio.com
    终于,我们的新产品Fotor Slideshow Maker上线了!!
    分享一款浏览器扩展--美图搜索-图片搜索工具
    分享网页微信防撤回插件
  • 原文地址:https://www.cnblogs.com/mlz-2019/p/4734613.html
Copyright © 2020-2023  润新知