五月 25th, 2009php计算两个数组中最长公共元素
此文章来源于后羿之弓,转载请注明出处
估计这个说法有些诡异,不过我也不知道该怎么描述,对应成字符串就是求最大公共子串,此时的字符串就是数组,字符对应的是数组的元素。
比较常规的方法就是LCS,单纯从c的角度,LCS还是比较耗空间。所有出现了一些替代方法,不过都相对耗时一些。
下面是我用php来计算两个数组中最长公共元素的代码。
- function longestComArr(&$newStrArr1,&$newStrArr2){
- $maxlen = 0;
- for($i=0;$i<count($newStrArr1);$i++){
- $j=$r=0;//记录当前短数组下标
- while($newStrArr2[$j] && $newStrArr1[$i]){
- $k=$i;//记录当前长数组下标
- while ($newStrArr1[$k] && $newStrArr1[$k] !=$newStrArr2[$j]) {
- $k++;
- }
- if ($newStrArr1[$k] ==$newStrArr2[$j]) {
- $startTmp1 = $k++;
- $startTmp2 = $j++;
- $len =1;
- while ($newStrArr1[$k] && $newStrArr2[$j] && $newStrArr1[$k] ==$newStrArr2[$j]) {
- $j++;$k++;$len++;
- }
- if($len > $maxlen){
- $startArr1 = $startTmp1;
- $startArr2 = $startTmp2;
- $maxlen = $len;
- }
- }
- $j = ++$r;
- }
- }
- return array('len'=>$maxlen,'start1'=>$startArr1,'start2'=>$startArr2);
- }