trie樹 字典樹 DFA演算法

2021-08-20 09:54:17 字數 2560 閱讀 4027

@service

public

class

sensitivewordutil

extends

timertask

return;

} else

string strs = keyword.split(",");

setkeywordset = new hashset();

for (string str : strs)

sensitivewordmap = addsensitivewordtohashmap(keywordset);

log.info("=sensitiveword=" + json.tojsonstring(sensitivewordmap));

}/**

* 讀取敏感詞庫,將敏感詞放入hashset中,構建乙個dfa演算法模型:

* },習=}}}

* 待整個map生成好最後直接賦值

**@param keywordset 敏感詞庫

*/private concurrenthashmap addsensitivewordtohashmap(setkeywordset) else

if (i == key.length() - 1) }}

return sensitivewordmaporg;

}/**

* 判斷文字是否包含敏感字元

**@param txt 文字

*@param matchtype 匹配規則 1:最小匹配規則,2:最大匹配規則

*@return 若包含返回true,否則返回false

*/public

static

boolean

iscontaintsensitiveword(string txt, int matchtype)

for (int i = 0; i < txt.length(); i++)

}return flag;

}/**

* 獲取文字中的敏感詞

**@param txt 文字

*@param matchtype 匹配規則:1:最小匹配規則,2:最大匹配規則

*@return

*/public

static setgetsensitiveword(string txt, int matchtype)

for (int i = 0; i < txt.length(); i++)

}return sensitivewordlist;

}/**

* 替換敏感字字元

**@param txt 替換字元,預設*

*/public

static string replacesensitiveword(string txt)

string word = replacesensitiveword(txt, maxmatchtype, null);

return word;

}/**

* 替換敏感字字元

**@param txt

*@param matchtype

*@param replacechar 替換字元,預設*

*/public

static string replacesensitiveword(string txt, int matchtype, string replacechar)

string resulttxt = txt;

setset = getsensitiveword(txt, matchtype);//獲取所有的敏感詞

iteratoriterator = set.iterator();

while (iterator.hasnext())

return resulttxt;

}/**

* 獲取替換字串

**@param replacechar

*@param length

*@return

*/private

static string getreplacechars(string replacechar, int length)

return resultreplace;

}/**

* 檢查文字中是否包含敏感字元,檢查規則如下:

* *@param txt

*@param beginindex

*@param matchtype

*@return 如果存在,則返回敏感詞字元的長度,不存在返回0

*/@suppresswarnings()

public

static

intchecksensitiveword(string txt, int beginindex, int matchtype)

for (int i = beginindex; i < txt.length(); i++)

}} else

}if (matchflag < 1 || !flag)

return matchflag;

}

演算法程式設計 Trie樹(字典樹)

trie樹是一種非常簡單且有效的資料結構,其主要用於針對包含大量的字串,但所有字串包含字元型別數量較少的情況下,對字串的儲存。最典型的應用就是儲存單詞,因此也稱作字典樹。例如,給定幾個單詞,則可以用trie樹進行儲存 由上圖可知,trie樹具有幾個性質 注,樹中每乙個結點都是有唯一的編號 idx i...

Trie樹(字典樹)

trie樹的核心思想是用空間換時間,通過在樹中儲存字串的公共字首,來達到加速檢索的目的。例如,對於一棵儲存由英文本母組成的字串的trie樹,如下圖 trie樹在實現的時候,可以用左兒子右兄弟的表示方法,也可以在每個節點處開設乙個陣列,如上圖的方法。trie樹的主要操作是插入 查詢,也可以進行刪除。插...

字典樹 Trie樹

字典樹 trie樹 顧名思義是一種樹形結構,屬於雜湊樹的一種。應用於統計 排序 查詢單詞 統計單詞出現的頻率等。它的優點是 利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。字典樹的結構特點 根節點不代表任何字元。其他節點從當前節點回溯到根節點可以得到它代表的字串。...