File tree Expand file tree Collapse file tree 3 files changed +99
-1
lines changed
Expand file tree Collapse file tree 3 files changed +99
-1
lines changed Original file line number Diff line number Diff line change 1+ package leet_code
2+
3+ import (
4+ "testing"
5+ )
6+
7+ //键值映射
8+ type MapSum struct {
9+ tire * TireData
10+ }
11+
12+ func Constructor () MapSum {
13+ return MapSum {tire : & TireData {node : make (map [rune ]* TireData , 26 )}}
14+ }
15+
16+ func (this * MapSum ) Insert (key string , val int ) {
17+ this .tire .Insert (key , val )
18+ }
19+
20+ func (this * MapSum ) Sum (prefix string ) int {
21+ res := this .tire .Search (prefix )
22+ if res == nil {
23+ return 0
24+ }
25+ var data int
26+ for _ , v := range res {
27+ data += v .val
28+ }
29+ return data
30+ }
31+
32+ type TireData struct {
33+ node map [rune ]* TireData
34+ key string
35+ val int
36+ isEnd bool
37+ }
38+
39+ func (t * TireData ) Insert (key string , val int ) {
40+ for _ , v := range key {
41+ if t .node [v ] == nil {
42+ t .node [v ] = & TireData {node : make (map [rune ]* TireData , 26 )}
43+ }
44+ t = t .node [v ]
45+ }
46+ t .key = key
47+ t .val = val
48+ t .isEnd = true
49+ }
50+ func (t * TireData ) Search (key string ) (data []* TireData ) {
51+ for _ , v := range key {
52+ if t .node [v ] == nil {
53+ return
54+ }
55+ t = t .node [v ]
56+ }
57+ GetNode (t , & data )
58+ return data
59+ }
60+
61+ func GetNode (d * TireData , data * []* TireData ) {
62+ if d .isEnd {
63+ * data = append (* data , d )
64+ }
65+ for _ , v := range d .node {
66+ GetNode (v , data )
67+ }
68+ }
69+
70+ func Test_TireData (t * testing.T ) {
71+ var tire = & TireData {node : make (map [rune ]* TireData , 26 )}
72+ tire .Insert ("apl" , 2 )
73+ tire .Insert ("apple" , 3 )
74+ tire .Search ("ap" )
75+ }
Original file line number Diff line number Diff line change @@ -42,6 +42,28 @@ func (t *Trie) StartsWith(prefix string) bool {
4242 return true
4343}
4444
45+ func (t * Trie ) StartsPrx (prefix string ) (res * []interface {}) {
46+ for _ , v := range prefix {
47+ if t .node [v ] == nil { //没找到该节点
48+ break
49+ }
50+ t = t .node [v ] //找到节点,跳到下一个节点
51+ }
52+ res = & []interface {}{}
53+ GetStartsPrx (t , res )
54+ return
55+ }
56+
57+ func GetStartsPrx (t * Trie , res * []interface {}) {
58+ if t .isLast {
59+ * res = append (* res , t .val )
60+ }
61+ for _ , v := range t .node {
62+ GetStartsPrx (v , res )
63+ }
64+ return
65+ }
66+
4567//查找数据
4668func (t * Trie ) SearchNode (key string ) (res []interface {}) {
4769 root := t
Original file line number Diff line number Diff line change @@ -8,8 +8,9 @@ func TestTrie_Insert(t *testing.T) {
88 t .Log (trie .Search ("apple" ))
99 t .Log (trie .Search ("app" ))
1010 t .Log (trie .StartsWith ("app" ))
11- trie .Insert ("abe " )
11+ trie .Insert ("aee " )
1212 trie .Insert ("aef" )
1313 t .Log (trie .SearchNode ("ae" ))
14+ t .Log (trie .StartsPrx ("ae" ))
1415
1516}
You can’t perform that action at this time.
0 commit comments