tree 树 搜索关键字
生活随笔
收集整理的這篇文章主要介紹了
tree 树 搜索关键字
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
<?php
class Trie {/*** node struct** node = array(* val->word* next->array(node)/null* depth->int* )*/private $root = array('depth' => 0,'next' => array(),);private $matched = array();public function append($keyword) {$words = preg_split('/(?<!^)(?!$)/u', $keyword);array_push($words, '`');$this->insert($this->root, $words);}public function match($str) {$this->matched = array();$words = preg_split('/(?<!^)(?!$)/u', $str);while (count($words) > 0) {$matched = array();$res = $this->query($this->root, $words, $matched);if ($res) {$this->matched[] = implode('', $matched);}array_shift($words);}return $this->matched;}private function insert(&$node, $words) {if (empty($words)) {return;}$word = array_shift($words);if (isset($node['next'][$word])) {$this->insert($node['next'][$word], $words);} else {$tmp_node = array('depth' => $node['depth'] + 1,'next' => array(),);$node['next'][$word] = $tmp_node;$this->insert($node['next'][$word], $words);}}private function query($node, $words, &$matched) {$word = array_shift($words);if (isset($node['next'][$word])) {array_push($matched, $word);if (isset($node['next'][$word]['next']['`'])) {return true;}return $this->query($node['next'][$word], $words, $matched);} else {$matched = array();return false;}}
}
總結(jié)
以上是生活随笔為你收集整理的tree 树 搜索关键字的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【NOI 2018】归程(Kruskal
- 下一篇: remove()与empty()的区别