• 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
  • 相关阅读:
    耐性4/21
    吃枸杞上火4/11
    metro style app 的程序构成 以c# 为例 GIS
    ListView 和 GridView ————转 GIS
    最大程度地利用像素,适应视图状态的变更___转 GIS
    metro style 里面的控件一览 以 Windows.UI.Xaml.Controls空间 GIS
    Windows 8里的标准化输入 GIS
    漫游应用程序数据 GIS
    FlipView 知识准备 GIS
    Data Binding Notifications绑定通知 GIS
  • 原文地址:https://www.cnblogs.com/ooooo/p/2235984.html
Copyright © 2020-2023  润新知