442

来源:互联网 发布:银天下交易软件 编辑:程序博客网 时间:2024/06/03 22:00

2017.9.4

这个学期重新开始刷题啊,一定要坚持下去啊。

首先知道什么是Trie,是一种新的树形结构,通常用来存储字符串。

在TrieNode这个节点中,exist这个变量用来判断是不是字符串的结尾,以此来判断是存在这个字符串,还是仅仅只是startwith。这一点是我最开始没有想到的。

剩下的就是一个字符一个字符的遍历过程了。


收获就是:

知道Trie的定义和结构。

使用exist来判断字符串是不是存在。

/** * Your Trie object will be instantiated and called as such: * Trie trie = new Trie(); * trie.insert("lintcode"); * trie.search("lint"); will return false * trie.startsWith("lint"); will return true */class TrieNode {    // Initialize your data structure here.    char ch;    boolean exit = false;public TrieNode() {    }public TrieNode(char ch){this.ch = ch;}TrieNode[] children;    }public class Trie {    private TrieNode root;    public Trie() {        root = new TrieNode();    }    // Inserts a word into the trie.    public void insert(String word) {        if(word == null || word.length() == 0){        return;        }        word = word.toLowerCase();        TrieNode pre = root;        for(int i = 0; i < word.length();i++){        int index = word.charAt(i) - 'a';        if(pre.children == null){        pre.children = new TrieNode[26];        }        if(pre.children[index] == null){        pre.children[index] = new TrieNode(word.charAt(i));        }        if(i == word.length() -1){        pre.children[index].exit = true;        }        pre = pre.children[index];        }    }    // Returns if the word is in the trie.    public boolean search(String word) {    if(word == null || word.length() == 0){    return false;    }    word = word.toLowerCase();        int length = word.length();        TrieNode pre = root;        for(int i = 0; i < length; i++){        if(pre == null){        return false;        }        int index = word.charAt(i) - 'a';        if(pre.children == null || pre.children[index] == null){        return false;        }        if(i == word.length() - 1 && pre.children[index].exit == false){        return false;        }        pre = pre.children[index];        }        return true;    }    // Returns if there is any word in the trie    // that starts with the given prefix.    public boolean startsWith(String prefix) {    if(prefix == null || prefix.length() == 0){    return false;    }    prefix = prefix.toLowerCase();    int length = prefix.length();    TrieNode pre = root;    for(int i = 0; i < prefix.length(); i++){    if(pre == null){    return false;    }    int index = prefix.charAt(i) - 'a';    if(pre.children == null || pre.children[index] == null){    return false;    }    pre = pre.children[index];    }    return true;    }}


原创粉丝点击