178、添加与搜索单词-数据结构设计

题目描述;
设计一个支持以下两种操作的数据结构:

void addWord(word)
bool search(word)
search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z 。 . 可以表示任何一个字母。

示例:

addWord(“bad”)
addWord(“dad”)
addWord(“mad”)
search(“pad”) -> false
search(“bad”) -> true
search(".ad") -> true
search(“b…”) -> true
说明:

你可以假设所有单词都是由小写字母 a-z 组成的。

跟上一题一样,使用前缀树
代码:

class Mytree{
	boolean isend;
	Mytree child[] = new Mytree[26];
}
Mytree tree ;
    public WordDictionary() {
        tree = new Mytree();
    }
    public void addWord(String word) {
        Mytree node = tree;
        for (char tem : word.toCharArray()) {
			if(node.child[tem - 'a'] == null){
				node.child[tem - 'a'] = new Mytree();
			}
			node = node.child[tem - 'a'];
		}
        node.isend = true;
    }
	public boolean search(String word) {
	    Mytree node = tree;
	    return search(word, node, 0);
	}
	public boolean search(String word,Mytree node,int index) {
		if(index == word.length() && node.isend){
			return true;
		}
		if(index == word.length()){
			return false;
		}
		char tem = word.charAt(index);
    	if(tem == '.'){
			for (int i = 0; i < 26; i++) {
				if(node.child[i] != null){
				    if(search(word, node.child[i], index + 1)){
						return true;
					}
				}
			}
			return false;
    	}else {
			if(node.child[tem - 'a'] == null){
				return false;
			}else {
				return search(word,node.child[tem - 'a'],index + 1);
			}
		}
	}
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值