AddandSearchWordDatastructuredesign【LeetCode】

<pre name="code" class="java">import java.util.LinkedList;
import java.util.Queue;

import leetcode.ImplementTriePrefixTree2.TrieNode;

/* Design a data structure that supports the following two operations:
 * void addWord(word)
 * bool search(word)
 * search(word) can search a literal word or a regular expression string containing only letters a-z or .. A . means it can represent any one letter.
 * For example:
 * addWord("bad")
 * addWord("dad")
 * addWord("mad")
 * search("pad") -> false
 * search("bad") -> true
 * search(".ad") -> true
 * search("b..") -> true
 * Note:
 * You may assume that all words are consist of lowercase letters a-z.
 * You should be familiar with how a Trie works. If not, please work on this problem: Implement Trie (Prefix Tree) first.
 */
//Array Implement

public class AddandSearchWordDatastructuredesign {
	class TrieNode {
		TrieNode[] children;
		boolean flag;

		public TrieNode() {
			this.children = new TrieNode[26];
			this.flag = false;
		}
	}

	public TrieNode root = new TrieNode();

	// Adds a word into the data structure.
	public void addWord(String word) {
		if (word == null || word.length() == 0)
			return;
		TrieNode node = root;
		for (int i = 0; i < word.length(); i++) {
			if (node.children[word.charAt(i) - 'a'] == null) {
				node.children[word.charAt(i) - 'a'] = new TrieNode();
			}
			node = node.children[word.charAt(i) - 'a'];
		}
		node.flag = true;
	}

	// Returns if the word is in the data structure. A word could
	// contain the dot character '.' to represent any one letter.
	public boolean search(String word) {
		Queue<TrieNode> queue = new LinkedList<TrieNode>();
		TrieNode node = root;
		queue.add(node);
		int index = 0;
		while (!queue.isEmpty()) {
			if (index == word.length())
				return true;
			TrieNode curr = queue.poll();
			if (word.charAt(index) == '.') {
				for (int i = 0; i < 26; i++) {
					if (curr.children[i] != null)
						queue.add(curr.children[i]);
				}
			} else {
				if (curr != null && curr.children[word.charAt(index) - 'a'] == null)
					break;
				else
					queue.add(curr.children[word.charAt(index) - 'a']);
			}
			index++;

		}
		return false;
	}
		public static void main(String[] args){
			System.out.println("ti");
			Add a=new Add();
			a.addWord("tjos");
			a.addWord("b");
			System.out.println(a.search("b"));
			System.out.println(a.search("tjod"));
		}
}

// Your WordDictionary object will be instantiated and called as such:
// WordDictionary wordDictionary = new WordDictionary();
// wordDictionary.addWord("word");
// wordDictionary.search("pattern");



                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值