基于PHP的DFA算法(敏感词过滤)
看到网上很多的DFA算法,很多都有不同程度的问题,自己修改了一下,亲测没有问题,用在系统中过滤敏感词汇,比正则匹配的速度快很多。
class DFA
{
private $arrHashMap = [];
public function getHashMap()
{
return $this->arrHashMap;
}
public function addKeyWord($strWord)
{
$len = mb_strlen($strWord, 'UTF-8');
// 传址
$arrHashMap = &$this->arrHashMap;
for ($i = 0; $i < $len; $i++) {
$word = mb_substr($strWord, $i, 1, 'UTF-8');
// 已存在
if (isset($arrHashMap[$word])) {
if ($i == ($len - 1)) {
$arrHashMap[$word]['end'] = 1;
}
} else {
// 不存在
if ($i == ($len - 1)) {
$arrHashMap[$word] = [];
$arrHashMap[$word]['end'] =