Go数据结构

(16)Go实现的trie解答leetcode-207

2019-04-24  本文已影响1人  哥斯拉啊啊啊哦
实现代码
type Trie struct {
   isWord bool
    next   map[rune]*Trie 
}

/** Initialize your data structure here. */
func Constructor() Trie {
    return Trie{
        isWord:false,
        next: make(map[rune]*Trie),
    }
}

/** Inserts a word into the trie. */
func (this *Trie) Insert(word string)  {
    if len(word) == 0 {
        return
    }

    cur := this
    for _, v := range word {
        _, ok := cur.next[v] // 在NewTrie中已经初始化
        if !ok {
            cur.next[v] = &Trie{false, map[rune]*Trie{}}
        }
        cur = cur.next[v]
    }
    cur.isWord=true
}

/** Returns if the word is in the trie. */
func (this *Trie) Search(word string) bool {
        if len(word) == 0 {
        return false
    }

    cur := this
    for _, v := range word {
        t1, ok := cur.next[v]
        if !ok {
            return false
        }
        cur = t1
    }
    return cur.isWord
}

/** Returns if there is any word in the trie that starts with the given prefix. */
func (this *Trie) StartsWith(prefix string) bool {
        if len(prefix) == 0 {
        return true
    }

    cur := this
    for _, v := range prefix {
        t1, ok := cur.next[v]
        if !ok {
            return false
        }
        cur = t1
    }
    return true
}
测试通过,由于是用map实现的,所以速度性能一般,map的速度听别人说比数组慢100倍

相关:
1)trie解决leetcode-211:添加与搜索单词
https://www.jianshu.com/p/74103f51aa36
2)trie解决leetcode-677:键值映射
https://www.jianshu.com/p/dd247d5591a2

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

上一篇 下一篇

猜你喜欢

热点阅读