211.添加与搜索单词,数据结构设计

211.添加与搜索单词,数据结构设计

实现addWord(),search()

1.字典树节点类
class TrieNode{
	constructor(val = null){
		this.val = val;
		this.children = new Map();
		this.isWord = false;
	}
}
2.初始化字典树,并实现添加和搜索
class wordDictonary{
	constructor(){
		this.root = new TrieNode(null);
	}
	//添加
	addWord(word){
		let ws = this.root;
		for(let c of word){
			if(!ws.children.get(c))
				ws.children.set(c, new TrieNode(c));
			ws = ws.children.get(c);
		}
		ws.isWord = true;
	};
	//搜索,因为有'.',所有存在递归
	search(word){
		return this.dfs(word,0,this.root);
	};
	dfs(word,index,node){
		if(!node) return false;
		if(index===word.length&&node.isWord) return true;
		if(word[index]==='.'){
			for(let [k,v] of node.children){
				if(this.dfs(word,index+1,v))
					return true;
			}
		}
		else{
			if(!node.children.get(word[index])) return false;
			else 
				return this.dfs(word,index+1,node.children.get(word[index]));
		}
		return false;
	};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值