用数组实现的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欢迎指出,转载请注明出处。
网友评论