码迷,mamicode.com
首页 > 其他好文 > 详细

211. Add and Search Word - Data structure design

时间:2017-07-06 18:49:24      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:object   ring   returns   nsis   bsp   sum   nbsp   script   can   

https://leetcode.com/problems/add-and-search-word-data-structure-design/#/description

 

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.

 

 

Sol:

 

Use dictionary data structure to solve this problem.

 

The key is the lengh of word, and the word itself is the value. However, if two words have the same length, the keys will clash. To avoid this,  we use defaultdict from collections and we use append method to add new element to the dictionary.  

 

To implement the search method, we check if the input word is in the dictionary. 

 

 

class WordDictionary(object):

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.word_dict = collections.defaultdict(list)
        

    def addWord(self, word):
        """
        Adds a word into the data structure.
        :type word: str
        :rtype: void
        """
        if word:
            self.word_dict[len(word)].append(word)
        

    def search(self, word):
        """
        Returns if the word is in the data structure. A word could contain the dot character ‘.‘ to represent any one letter.
        :type word: str
        :rtype: bool
        """
        
        if not word:
            return False
        if . not in word:
            return word in self.word_dict[len(word)]
        
        # if ‘.‘ is in the word
        for v in self.word_dict[len(word)]:
            for i, ch in enumerate(word):
                if ch != v[i] and ch != .:
                    break
            else:
                return True
        return False


# Your WordDictionary object will be instantiated and called as such:
# obj = WordDictionary()
# obj.addWord(word)
# param_2 = obj.search(word)

 

 

 

 

Note:

 

1 for - else usage in python:

 

The else part is executed when for loop does not break. 

 

2 collections.defaultdic usage in python:

import collections
word_dict = collections.defaultdict(list)
word_dict[3].append("pad")
word_dict[3].append("dad")
print "pad" in word_dict[3]
print word_dict[3]

 

 

== >

 

True

[‘pad‘, ‘dad‘]

 

3 for i, ch in enumerate(word) usage in python:

 

Since we will check if word is in the dictionary with same key/length, it is natural to use enumerate. 

 

1 seq = [one, two, three]
2 for i, element in enumerate(seq):
3     print i, seq[i]

 

 

==>

0 one

1 two

2 three

 

 

Sol 2:

 

Use tree data structure. 

 

https://discuss.leetcode.com/topic/14216/tree-solutions-18-20-lines

 

https://discuss.leetcode.com/topic/26944/python-solution-recursive-version-dfs

 

https://discuss.leetcode.com/topic/23695/python-easy-to-follow-solution-using-trie

 

211. Add and Search Word - Data structure design

标签:object   ring   returns   nsis   bsp   sum   nbsp   script   can   

原文地址:http://www.cnblogs.com/prmlab/p/7127463.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!