u
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
package top100liked
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// https://leetcode.cn/problems/implement-trie-prefix-tree/?envType=study-plan-v2&envId=top-100-liked
|
||||
|
||||
type Node struct {
|
||||
children [26]*Node
|
||||
isEnd bool
|
||||
}
|
||||
|
||||
type Trie struct {
|
||||
root *Node
|
||||
}
|
||||
|
||||
func Constructor() Trie {
|
||||
return Trie{root: &Node{}}
|
||||
}
|
||||
|
||||
func (this *Trie) Insert(word string) {
|
||||
cur := this.root
|
||||
for i := 0; i < len(word); i++ {
|
||||
idx := word[i] - 'a'
|
||||
if cur.children[idx] == nil {
|
||||
cur.children[idx] = &Node{}
|
||||
}
|
||||
cur = cur.children[idx]
|
||||
}
|
||||
cur.isEnd = true
|
||||
}
|
||||
|
||||
func (this *Trie) Search(word string) bool {
|
||||
cur := this.root
|
||||
for i := 0; i < len(word); i++ {
|
||||
idx := word[i] - 'a'
|
||||
if cur.children[idx] == nil {
|
||||
return false
|
||||
}
|
||||
cur = cur.children[idx]
|
||||
}
|
||||
return cur.isEnd
|
||||
}
|
||||
|
||||
func (this *Trie) StartsWith(prefix string) bool {
|
||||
cur := this.root
|
||||
for i := 0; i < len(prefix); i++ {
|
||||
idx := prefix[i] - 'a'
|
||||
if cur.children[idx] == nil {
|
||||
return false
|
||||
}
|
||||
cur = cur.children[idx]
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func Test(t *testing.T) {
|
||||
trie := Constructor()
|
||||
trie.Insert("apple")
|
||||
fmt.Println(trie.Search("apple")) // 返回 True
|
||||
fmt.Println(trie.Search("app")) // 返回 False
|
||||
fmt.Println(trie.StartsWith("app")) // 返回 True
|
||||
trie.Insert("app")
|
||||
fmt.Println(trie.Search("app")) // 返回 True
|
||||
}
|
||||
Reference in New Issue
Block a user