程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP KMP算法

PHP KMP算法

編輯:PHP綜合

KMP算法簡介:

KMP算法是一種改進後的字符串匹配算法,由D.E.Knuth與V.R.Pratt和J.H.Morris同時發現,因此人們稱它為克努特——莫裡斯——普拉特操作(簡稱KMP算法)。通過一個輔助函數實現跳過掃描不必要的目標串字符,以達到優化效果。

function getNext($string) {
	$next[0] = 0;
	$j = 1;
	$k = 0;
	$strlen = strlen($string);
	while($j < $strlen){
		if($string[$k] == $string[$j]) {
			$next[$j] = $k;
			$j++;
			$k++;
		}else{
			$k = $next[$k];
			if($k == 0) {
				$next[$j] = 0;
				$j++;	
			}
		}
	}
	
	return $next;
}


function kmpSearch($string, $pattern) {
	$len1 = strlen($string);
	$len2 = strlen($pattern);
	$next = getNext($pattern);

	$i = 0;
	$j = 0;
	while($i < $len1){
		if($string[$i] == $pattern[$j]) {
			$i++;
			$j++;
		} else {
			$j = $next[$j];
			if($j == 0) {
				$i++;
			}
		}
		
		if($j == $len2 ){
			echo '子串出現位置:'.($i - $j) .'<br/>';
			$j = $next[$j-1]; //匹配出pattern在string中全部出現位置
		}
	}
}
*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved