PHP實現KMP演算法

來源:互聯網
上載者:User


function cal_next($str){    $next[0] = -1;//next[0]初始化為-1    $i=0;    $j = -1;    $len=strlen($str);    while($i<$len){            if($j===-1 || $str[$i]===$str[$j]){            $i++;            $j++;            $next[$i]=$j;        }else{            $j=$next[$j];        }    }    return $next;}$str='ABCDABD';$next=cal_next($str);var_dump($next);function search($str,$search){    $next=cal_next($search);    $i=0;    $j=0;    $lenStr=strlen($str);    $lenSearch=strlen($search);    while($i<$lenStr && $j<$lenSearch){            if($j===-1 || $str[$i]===$search[$j]){            //$i 主串的不後退,移動模式串。為什麼沒有$j===0,因為如果有$j++為1,下一步是判斷$str[$i]===$search[1],跳過了$search[0]            $i++;            $j++;        }else{            $j=$next[$j];        }    }    if($j===$lenSearch){        return $i-$j;    }    return -1;}var_dump(search($str,'ABD'));

參考

[KMP演算法(1):如何理解KMP](https://segmentfault.com/a/1190000008575379)[字串匹配的KMP演算法](http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html) [KMP演算法最淺顯理解](https://blog.csdn.net/starstar1992/article/details/54913261)


function cal_next($str){    $next[0] = -1;//next[0]初始化為-1    $i=0;    $j = -1;    $len=strlen($str);    while($i<$len){        if($j===-1 || $str[$i]===$str[$j]){            $i++;            $j++;            $next[$i]=$j;        }else{            $j=$next[$j];        }    }    return $next;}$str='ABCDABD';$next=cal_next($str);var_dump($next);function search($str,$search){    $next=cal_next($search);    $i=0;    $j=0;    $lenStr=strlen($str);    $lenSearch=strlen($search);    while($i<$lenStr && $j<$lenSearch){        if($j===-1 || $str[$i]===$search[$j]){//$i 主串的不後退,移動模式串。為什麼沒有$j===0,因為如果有$j++為1,下一步是判斷$str[$i]===$search[1],跳過了$search[0]            $i++;            $j++;        }else{            $j=$next[$j];        }    }    if($j===$lenSearch){        return $i-$j;    }    return -1;}var_dump(search($str,'ABD'));

參考

[KMP演算法(1):如何理解KMP](https://segmentfault.com/a/1190000008575379)[字串匹配的KMP演算法](http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html) [KMP演算法最淺顯理解](https://blog.csdn.net/starstar1992/article/details/54913261)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.