此文章来源于后羿之弓,转载请注明出处

估计这个说法有些诡异,不过我也不知道该怎么描述,对应成字符串就是求最大公共子串,此时的字符串就是数组,字符对应的是数组的元素。

比较常规的方法就是LCS,单纯从c的角度,LCS还是比较耗空间。所有出现了一些替代方法,不过都相对耗时一些。
下面是我用php来计算两个数组中最长公共元素的代码。

  1. function longestComArr(&$newStrArr1,&$newStrArr2){
  2.     $maxlen = 0;
  3.     for($i=0;$i<count($newStrArr1);$i++){
  4.         $j=$r=0;//记录当前短数组下标
  5.         while($newStrArr2[$j] && $newStrArr1[$i]){
  6.             $k=$i;//记录当前长数组下标
  7.             while ($newStrArr1[$k] && $newStrArr1[$k] !=$newStrArr2[$j]) {
  8.                 $k++;
  9.             }
  10.             if ($newStrArr1[$k] ==$newStrArr2[$j]) {
  11.                 $startTmp1 = $k++;
  12.                 $startTmp2 = $j++;
  13.                 $len =1;
  14.                 while ($newStrArr1[$k] && $newStrArr2[$j] && $newStrArr1[$k] ==$newStrArr2[$j]) {
  15.                     $j++;$k++;$len++;
  16.                 }
  17.                 if($len > $maxlen){
  18.                     $startArr1 = $startTmp1;
  19.                     $startArr2 = $startTmp2;
  20.                     $maxlen = $len;
  21.                 }
  22.             }
  23.             $j =  ++$r;
  24.         }
  25.     }
  26.     return array('len'=>$maxlen,'start1'=>$startArr1,'start2'=>$startArr2);
  27. }