力扣 208实现前缀树

所谓的前缀树:是一种树形结构,利用字符串的公共前缀来减少查询时间;最大限度地减少无所谓字符串的比较;
它有3个性质:根节点不包括字符;除根节点外每一个节点都只包含一个字符,从根节点到某一个节点,路径上经过的字符连接起来为该节点对应的字符串,每个节点的所有子节点包含的字符都不相同;

//实现一个前缀树,包含insert,search,startwith三个函数
分析:主要考察堆前缀树的理解;
例: Trie trie=new Trie();
trie.insert(“apple”);
trie.search(“apple”);//返回true;
trie.search(“app”);//返回false;
trie.startWith(“app”);
trie.insert(“app”);

class Trie{
	class TrieNode{
	     TrieNode[] next;
	     private boolean isEnd;
	     public TrieNode(){
	     nex=new TrieNode[26];
	     isEnd=false;//这里表示是否为最后一个字符,也就是是否是单词的结尾;
	     }
	}
	private TrieNode root;
	public Trie(){
	//初始化一个根节点;
	     root=new TrieNode();
	}
	public void insert(String word){
		TrieNode node=root;
		for(char c:wor.toCharArray()){
			if(node.next[c-'a']==null){
				node.next[c-'a']=new TrieNode();
			}
			node=node.next[c-'a'];
		}
		node.isEnd=true;
		}
	public boolean search(String word){
		TrieNode node=root;
		for(char c:word.toCharArray()){
			node=node.next[c-'a'];
			if(node==null) return false;
		}
	//看最后一个节点是不是某个单词的末尾;
		return node.isEnd;
	}
	public boolean StartWith(String prefix){
		TrieNode node=root;
		for(char c:prefix.toCharArray()){
			node=node.next[c-'a'];
			if(node==null) return false;
		}
		return true;
	}

}

你可能感兴趣的:(leetcode刷题)