lintcode 实现一个 Trie

本文介绍了一个Trie数据结构的实现方法,包括insert、search和startsWith三个核心操作,并提供了详细的Java代码示例。

实现一个 Trie,包含 insertsearch, 和 startsWith 这三个方法。

 注意事项

你可以假设所有的输入都是小写字母a-z。

样例
insert("lintcode")
search("code") // return false
startsWith("lint") // return true
startsWith("linterror") // return false
insert("linterror")
search("lintcode) // return true
startsWith("linterror") // return true
标签 

package tju.chc;

/**
 * Your Trie object will be instantiated and called as such:</br>
 * Trie trie = new Trie();</br>
 * trie.insert("lintcode");</br>
 * trie.search("lint"); will return false</br>
 * trie.startsWith("lint"); will return true
 */
public class TrieNode {
    // Initialize your data structure here.
	boolean exist;
	char ch;
	TrieNode[] children;
	
    public TrieNode() {
        
    }
    
    public TrieNode(char ch){
    	this.ch = ch;
    }
}

package tju.chc;

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 ;
        }
        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));
        	}
        	pre = pre.children[index];
        	if(i == word.length() - 1){
        		pre.exist = true;
        	}
        	
        }
    }

    // Returns if the word is in the trie.
    public boolean search(String word) {
    	 if (word == null || word.length() == 0) {
    		 return false;
    		}
        TrieNode pre = root;
        if(pre.exist == true)return true;
    	for(int i = 0 ; i < word.length(); i++){
    		int index = word.charAt(i) - 'a'; 
    		if(pre.children == null||pre.children[index] == null){
    			return false;
    		}
    		if (i == word.length() - 1 && pre.children[index].exist == 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;
    	}
        TrieNode pre = root;
    	for(int i = 0 ; i < prefix.length(); i++){
    		int index = prefix.charAt(i) - 'a'; 
    		if(pre.children == null ||pre.children[index] == null){
    			return false;
    		}

    		pre = pre.children[index];
    	}
    	return true;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值