美文网首页Go数据结构
(17)Go实现的trie解答leetcode-211

(17)Go实现的trie解答leetcode-211

作者: 哥斯拉啊啊啊哦 | 来源:发表于2019-04-24 11:16 被阅读0次
用数组实现的trie来解决
type WordDictionary struct {
    isWord bool
    next [26]*WordDictionary
}

func Constructor() WordDictionary {
    return WordDictionary{
        isWord:false,
        next:[26]*WordDictionary{},
    }
}

func (this *WordDictionary) AddWord(word string)  {
    if len(word) == 0 {
        return
    }

    for _, v := range word {
        if this.next[v-97] == nil {
            this.next[v-97] = new(WordDictionary)
        }
        this = this.next[v-97]
    }
    this.isWord=true
}

func (this *WordDictionary) Search(word string) bool {
    length := len(word)
    if length == 0 {
        return true
    }

    return this.match(word, 0)
}

// match: word的index位元素是否在trie树里面
func (this *WordDictionary) match(word string, index int) bool {
    if index == len(word) {
        return this.isWord
    }
    
   if word[index] == '.' {
        for i := 0; i < 26; i++ {
            if this.next[i] == nil {
                continue
            }
            if this.next[i].match(word, index+1) {
                return true
            }
        }
        return false
    }
    if this = this.next[word[index]-'a']; this == nil {
        return false
    }
    return this.match(word, index+1)
}
测试通过

相关:
1)trie解决leetcode-207:实现trie
https://www.jianshu.com/p/d95153f382f6
2)trie解决leetcode-677:键值映射
https://www.jianshu.com/p/dd247d5591a2

有bug欢迎指出,转载请注明出处。

相关文章

网友评论

    本文标题:(17)Go实现的trie解答leetcode-211

    本文链接:https://www.haomeiwen.com/subject/rmbwgqtx.html