zoukankan      html  css  js  c++  java
  • php 实现KMP算法

    简介:这是php 实现KMP算法的详细页面,介绍了和php,php, kmp, 数据结构, 算法 php 实现KMP算法有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=360997' scrolling='no'> <?php
        /**
         * KMP算法的PHP实现
         *
         * @author zhaojiangwei 2011/10/22 10:28
         */
    
    
        class KMP{
            private $next = NULL; //模式串T的next数组
            private $t = NULL; //模式串
            private $str = NULL; //主串

            public function KMP($str){
                $this->str = str_split($str);
                $this->next = array();
            }

            //返回主串的长度
            public function getStrCount(){
                return count($this->str);
            }

            //返回结果
            public function getStrPos($substr){
                $substr = str_split($substr);
                $this->getNext($substr);
                $strCount = $this->getStrCount();
                $substrCount = count($substr);
                $subIndex = 0;//子串的起始比较位置
                $strIndex = 0;//主串目前的比较到的位置

                while($subIndex < $substrCount && ($strCount - $strIndex) >= ($substrCount - $subIndex)){
                    if($subIndex == -1 || $this->str[$strIndex] == $substr[$subIndex]){
                        $subIndex ++;
                        $strIndex ++;
                    }else{
                        $subIndex = $this->next[$subIndex];
                    }
                }

                if($subIndex == $substrCount){
                    return $strIndex - $substrCount;
                }else{
                    return false;
                }
             }

             //求模式串的NEXT数组
             public function getNext($t){
                if(!is_array($t)){
                    $t = str_split($t);
                }

                $this->next[0] = -1;
                $count = count($t);

                $i = 0;
                $j = -1;
                while($i < $count){
                    if($j == -1 || $t[$i] == $t[j]){
                        $j ++;
                        $i ++;
                       
                        if($t[$i] == $t[$j]){
                            $this->next[$i] = $this->next[$j];
                        }else{
                            $this->next[$i] = $j;
                        }
                    }else{
                        $j = $this->next[$j];
                    }
                }

                return $this->next;
            }

       }

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/360997.html pageNo:1
  • 相关阅读:
    (转)Ogre终于开始改进其对地形渲染的支持
    (转)让VS2005编辑器支持着色器语法高亮
    (转)天龙粒子系统改进
    (转)【行业专题】计算机世界《狗日的腾讯》报道
    (转)Ogre天龙八部2及鹿鼎记天空顶(Skydome)镜头眩光(Lens Flare)等效果的实现
    (转)“你的代码写的很烂”
    程序员能力矩阵
    Oracle操作表空间
    TCP/IP、HTTP、WEBSERVICE、SOAP、ICE都使用后才有感慨
    oracleserviceSID 在系统服务里丢失
  • 原文地址:https://www.cnblogs.com/ooooo/p/2235984.html
Copyright © 2011-2022 走看看