BMH子串查找算法(PHP实现)
来源:互联网 发布:javascript做网站 编辑:程序博客网 时间:2024/05/16 15:50
interface StringSearchable
{
public function search($substring,$buffer);
}
class BoyerMooreStringSearchimplements 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);
}
protectedfunction 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()
{
returnsizeof($this->results);
}
public function getJumpLength($charIndex)
{
if (array_key_exists($charIndex,$this->jumpTable)) {
return$this->jumpTable[$charIndex];
} else {
returnstrlen($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 BoyerMooreStringSearchimplements 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);
}
protectedfunction 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()
{
returnsizeof($this->results);
}
public function getJumpLength($charIndex)
{
if (array_key_exists($charIndex,$this->jumpTable)) {
return$this->jumpTable[$charIndex];
} else {
returnstrlen($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;
}
0 0
- BMH子串查找算法(PHP实现)
- BMH子串查找算法(PHP实现)
- BMH子串查找算法(PHP实现)
- bmh算法
- BMH文本搜索算法
- 字符串算法-BMH
- kmp子串查找算法
- BF朴素查找算法(查找子串)
- PHP实现 Manacher 最大回文子串算法
- PHP的二分查找算法实现
- PHP实现折半(二分)查找算法
- PHP实现折半(二分)查找算法
- PHP 实现见得的二叉排序树查找算法
- PHP 子串查找和替换
- 算法分析---查找最大回文子串
- KMP算法字符串查找子串
- 查找子串的索引位置算法
- 查找最大回文子串算法
- Atitit.异步编程 java .net php python js 的比较
- BaseDao增删改查自动化的制作
- Mac Mini 重做系统 - 两年前网络笔记重用
- 第七周项目4----全部
- 菜鸟学编程之一:C定义、初始化矩阵
- BMH子串查找算法(PHP实现)
- 赶走屌丝创业者:中关村创业大街疯狂而残酷的变迁记
- leetcode - Remove Duplicates from Sorted List II
- 库是相当复杂的
- Hibernate4 No Session found for current thread原因
- Ubuntu Server 网络配置
- UVA103 (DP)
- this引出的上下行转换和类继承体系设计需要注意的问题
- 浅谈大数的进制转换