BMH子串查找算法(PHP实现)
来源:互联网 发布:身份证扫描仪 windows 编辑:程序博客网 时间:2024/05/29 18:56
代码
interface StringSearchable
{
public function search($substring, $buffer);
}
class BoyerMooreStringSearch implements StringSearchable
{
public $substring = null;
public $buffer = '';
public $jumpTable = array();
protected $results = array();
public function __construct()
{
}
public function __destruct()
{
}
public function search($substring, $buffer)
{
$this->results = array();
$this->substring = $substring;
$this->buffer = $buffer;
$this->deriveJumpTable();
$substringLen = strlen($this->substring);
$currentCharIndex = $substringLen - 1;
$bufferLen = strlen($this->buffer);
while ($currentCharIndex < $bufferLen) {
for ($i = $substringLen - 1; $i >= 0; $i--) {
if ($this->buffer[$currentCharIndex - $substringLen + $i + 1] == $this->substring[$i]) {
if ($i == 0) {
$this->results[] = $currentCharIndex - $substringLen;
$currentCharIndex += $this->getJumpLength($this->buffer[$currentCharIndex]);
} else {
continue;
}
} else {
$currentCharIndex += $this->getJumpLength($this->buffer[$currentCharIndex]);
break;
}
}
}
return (sizeof($this->results) > 0);
}
protected function deriveJumpTable()
{
$maxJump = strlen($this->substring);
for ($i = strlen($this->substring) - 2; $i >= 0; $i--) {
if (!array_key_exists($this->substring[$i], $this->jumpTable)) {
$this->jumpTable[$this->substring[$i]]] = $maxJump - $i -1;
}
}
}
public function getJumpTable()
{
return $this->jumpTable;
}
public function getResults()
{
return $this->results;
}
public function getResultsCount()
{
return sizeof($this->results);
}
public function getJumpLength($charIndex)
{
if (array_key_exists($charIndex, $this->jumpTable)) {
return $this->jumpTable[$charIndex];
} else {
return strlen($this->substring);
}
}
}
function Main()
{
$poem = <<<POEM
you son of bitch
god damn it
hey,god love me
POEM;
$bm = new BoyerMooreStringSearch();
$bm->search('god', $poem);
$count = $bm->getResultsCount;
echo $count;
}
{
public function search($substring, $buffer);
}
class BoyerMooreStringSearch implements StringSearchable
{
public $substring = null;
public $buffer = '';
public $jumpTable = array();
protected $results = array();
public function __construct()
{
}
public function __destruct()
{
}
public function search($substring, $buffer)
{
$this->results = array();
$this->substring = $substring;
$this->buffer = $buffer;
$this->deriveJumpTable();
$substringLen = strlen($this->substring);
$currentCharIndex = $substringLen - 1;
$bufferLen = strlen($this->buffer);
while ($currentCharIndex < $bufferLen) {
for ($i = $substringLen - 1; $i >= 0; $i--) {
if ($this->buffer[$currentCharIndex - $substringLen + $i + 1] == $this->substring[$i]) {
if ($i == 0) {
$this->results[] = $currentCharIndex - $substringLen;
$currentCharIndex += $this->getJumpLength($this->buffer[$currentCharIndex]);
} else {
continue;
}
} else {
$currentCharIndex += $this->getJumpLength($this->buffer[$currentCharIndex]);
break;
}
}
}
return (sizeof($this->results) > 0);
}
protected function deriveJumpTable()
{
$maxJump = strlen($this->substring);
for ($i = strlen($this->substring) - 2; $i >= 0; $i--) {
if (!array_key_exists($this->substring[$i], $this->jumpTable)) {
$this->jumpTable[$this->substring[$i]]] = $maxJump - $i -1;
}
}
}
public function getJumpTable()
{
return $this->jumpTable;
}
public function getResults()
{
return $this->results;
}
public function getResultsCount()
{
return sizeof($this->results);
}
public function getJumpLength($charIndex)
{
if (array_key_exists($charIndex, $this->jumpTable)) {
return $this->jumpTable[$charIndex];
} else {
return strlen($this->substring);
}
}
}
function Main()
{
$poem = <<<POEM
you son of bitch
god damn it
hey,god love me
POEM;
$bm = new BoyerMooreStringSearch();
$bm->search('god', $poem);
$count = $bm->getResultsCount;
echo $count;
}
- BMH子串查找算法(PHP实现)
- BMH子串查找算法(PHP实现)
- BMH子串查找算法(PHP实现)
- bmh算法
- BMH文本搜索算法
- 字符串算法-BMH
- kmp子串查找算法
- BF朴素查找算法(查找子串)
- PHP实现 Manacher 最大回文子串算法
- PHP的二分查找算法实现
- PHP实现折半(二分)查找算法
- PHP实现折半(二分)查找算法
- PHP 实现见得的二叉排序树查找算法
- PHP 子串查找和替换
- 算法分析---查找最大回文子串
- KMP算法字符串查找子串
- 查找子串的索引位置算法
- 查找最大回文子串算法
- 关于建立东亚共同体的可能性的探讨
- 我思念的城市
- 【学习】opensession 与getCurrentsession的区别
- 骇人听闻,VB遇到这现象,大家小心哇~
- Ubuntu软件安装两则
- BMH子串查找算法(PHP实现)
- 消息分发服务器优化总结
- U盘流行病毒autorun的分析及清除方法
- 显示最大值
- .NET学习方法总结(转)
- C++中的RTTI实现
- 网络大排档 网页设计教程网
- 没小孩和即将有小孩的兄弟姐妹,看看,关乎后代重大身体健康
- C++函数重写、重载几点小结