字典树Trie Java实现

TrieNode 实现

/* Trie节点 */
class TrieNode {
	private TrieNode[] links; // 记录下一个字母
	private final int R = 26;
	private boolean isEnd; // 可选项,单词是否结束
	private String word; // 可选项,在最后一个节点记录完整单词

	public TrieNode() {
		links = new TrieNode[R];
	}
	
	/* 查找字符 ch 是否为下一个字母 */
	public boolean containsKey(char ch) {
		return links[ch - 'a'] != null;
	}
	
	/* 获取字符节点 */
	public TrieNode get(char ch) {
		return links[ch - 'a'];
	}
	
	/* 添加字符节点 */
	public void set(char ch, TrieNode node) {
		links[ch - 'a'] = node;
	}

	/* 单词结尾,设 isEnd = true */
	public void setEnd() {
		isEnd = true;
	}
	
	/* 查看是否为单词结尾 */
	public boolean isEnd() {
		return isEnd;
	}
	
	/* 在最后一个节点可以记录完整单词 */
	public void setWord(String word) {
		this.word = word;
	}
	
	/* 获取单词 */
	public String getWord() {
		return word;
	}
}

Trie实现

class Trie {
	private	TrieNode root; // 根结点
	
	public Trie() {
		root = new TrieNode();
	}

	/* 添加单词 */
	public void insert(String word) {
		TrieNode node = root;
		for (char ch : word.toCharArray()) {
			if (!node.containsKey(ch)) node.put(ch, new TrieNode());
			node = node.get(ch);
		}
		node.setEnd();
		node.setWord(word);
	}
	
	/* 查找前缀 */
	public TrieNode searchPrefix(String word) {
		TrieNode node = root;
		for (char ch : word.toCharArray()) {
			if (!node.containsKey(ch)) return null;
			node = node.get(ch);
		}
		return node;
	}
	
	/* 查找单词 */
	public boolean search(String word) {
		TrieNode node = searchPrefix(word);
		return node != null && node.isEnd();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值