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;
}
}