feat(Go-Tool):2020/12/15:添加前缀树工具,实现前缀搜索和字符串搜索功能
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* @Author : huangzj
|
||||
* @Time : 2020/12/14 16:15
|
||||
* @Description:
|
||||
*/
|
||||
|
||||
package trie
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestTrie(t *testing.T) {
|
||||
commonTest() //常规功能测试
|
||||
sensitiveWordsTest() //敏感词汇屏蔽测试
|
||||
searchTrie() //查找前缀匹配的所有字符串
|
||||
searchTrieVague() //模糊查询前缀匹配的所有字符串
|
||||
}
|
||||
|
||||
func searchTrieVague() {
|
||||
fmt.Println()
|
||||
fmt.Println("模糊查询 查找前缀匹配的所有字符串")
|
||||
trie := New()
|
||||
trie.insert("abcuuid").insert("abcuued").insert("abcMxns").insert("abssde").insert("avddfa")
|
||||
trie.insert("我爱中国").insert("我爱祖国").insert("我爱学习").insert("我是谁").insert("我在哪里")
|
||||
trie.insert("我是你").insert("我").insert("我喜欢学习").insert("我在厦门").insert("我是一个程序员")
|
||||
|
||||
fmt.Println()
|
||||
fmt.Println()
|
||||
result3, _ := trie.SearchTrieVague("我爱她")
|
||||
for _, r := range result3 {
|
||||
fmt.Println(r)
|
||||
}
|
||||
}
|
||||
|
||||
func searchTrie() {
|
||||
fmt.Println()
|
||||
fmt.Println("查找前缀匹配的所有字符串")
|
||||
trie := New()
|
||||
trie.insert("abcuuid").insert("abcuued").insert("abcMxns").insert("abssde").insert("avddfa")
|
||||
trie.insert("我爱中国").insert("我爱祖国").insert("我爱学习").insert("我是谁").insert("我在哪里")
|
||||
|
||||
fmt.Println()
|
||||
fmt.Println()
|
||||
result, _ := trie.SearchTrie("abc")
|
||||
for _, r := range result {
|
||||
fmt.Println(r)
|
||||
}
|
||||
|
||||
fmt.Println()
|
||||
fmt.Println()
|
||||
result1, _ := trie.SearchTrie("我爱")
|
||||
for _, r := range result1 {
|
||||
fmt.Println(r)
|
||||
}
|
||||
|
||||
fmt.Println()
|
||||
fmt.Println()
|
||||
result2, _ := trie.SearchTrie("我爱她")
|
||||
for _, r := range result2 {
|
||||
fmt.Println(r)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func sensitiveWordsTest() {
|
||||
trie := New()
|
||||
trie.insert("粗话").insert("fuck").insert("fuckk").insert("脏话")
|
||||
s := "我是脏话,我是粗话,fuckk,fuck,fffuccck"
|
||||
word := trie.DealFunc(s, func(sentence []rune, start int, end int) string {
|
||||
var replace string
|
||||
for i := 0; i < end-start; i++ {
|
||||
replace = replace + "*"
|
||||
}
|
||||
runes := append(sentence[0:start], []rune(replace)...)
|
||||
runes = append(runes, sentence[end:]...)
|
||||
return string(runes)
|
||||
})
|
||||
fmt.Println(word)
|
||||
}
|
||||
|
||||
func commonTest() {
|
||||
trie := New()
|
||||
trie.insert("ABC").insert("AB").insert("ABE").insert("ABEX").insert("XYZ").insert("你").insert("你好").insert("你是谁")
|
||||
result := trie.Traverse()
|
||||
for _, r := range result {
|
||||
fmt.Println(r)
|
||||
}
|
||||
|
||||
fmt.Println()
|
||||
fmt.Println("进行查找测试")
|
||||
fmt.Println(trie.Search("Abc"))
|
||||
fmt.Println(trie.Search("ABC"))
|
||||
fmt.Println(trie.Search("ABEX"))
|
||||
fmt.Println(trie.Search("ABEx"))
|
||||
fmt.Println(trie.Search("你好"))
|
||||
fmt.Println(trie.Search("你好吗"))
|
||||
|
||||
fmt.Println("进行删除测试")
|
||||
trie.Delete("你").Delete("ABC")
|
||||
fmt.Println(trie.Search("你"))
|
||||
fmt.Println(trie.Search("你好"))
|
||||
fmt.Println(trie.Search("你是谁"))
|
||||
fmt.Println(trie.Search("AB"))
|
||||
fmt.Println(trie.Search("ABE"))
|
||||
fmt.Println(trie.Search("ABC"))
|
||||
|
||||
fmt.Println()
|
||||
fmt.Println("再次遍历所有的字典")
|
||||
result = trie.Traverse()
|
||||
for _, r := range result {
|
||||
fmt.Println(r)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user