208. Implement Trie (Prefix Tree)

Implement a trie with insert , search , and startsWith methods.

class TrieNode {
boolean isEnd;
TrieNode[] children;

public TrieNode() {
    isEnd =
true ;
    children =
new TrieNode[ 26 ];
}
}

public class Trie {
private TrieNode root;

public Trie() {
    root =
new TrieNode();
}

public void insert(String word) {
TrieNode current = root;
for ( int i= 0 , L=word.length(); i<L; i++) {
   
int id = word.charAt(i) - 'a' ;
   
if (current.children[id]== null ) {
    current.children[id] =
new TrieNode();
    current.children[id].isEnd =
false ;
    }
    current = current.children[id];
    }
    current.isEnd =
true ;
}

public boolean search(String word) {
   
return search(word, 1) ;
}
public boolean startsWith(String prefix) {
   
return search(prefix, 2) ;
}
private boolean search(String str, int type) {
    TrieNode current = root;
   
int i= -1 , L=str.length();
   
while (++i<L) {
       
int id = str.charAt(i) - 'a' ;
       
if ((current=current.children[id]) == null ) return false ;
    }
   
return type== 1 ? current.isEnd : true ;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值