欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP 最长公共子序列LCS 中文汉字版本怎么写?

程序员文章站 2022-06-01 14:24:26
...
已经写了ASCII字母版
function LCS($str_1, $str_2) {
  $len_1 = strlen($str_1);
  $len_2 = strlen($str_2);
  $len = $len_1 > $len_2 ? $len_1 : $len_2;

  $dp = array();
  for ($i = 0; $i  $dp[$i][$j - 1] ? $dp[$i - 1][$j] : $dp[$i][$j - 1];
      }
    }
  }

  return $dp[$len_1][$len_2];
}

如何扩展成中文版?

回复内容:

已经写了ASCII字母版

function LCS($str_1, $str_2) {
  $len_1 = strlen($str_1);
  $len_2 = strlen($str_2);
  $len = $len_1 > $len_2 ? $len_1 : $len_2;

  $dp = array();
  for ($i = 0; $i  $dp[$i][$j - 1] ? $dp[$i - 1][$j] : $dp[$i][$j - 1];
      }
    }
  }

  return $dp[$len_1][$len_2];
}

如何扩展成中文版?

我自己解决了,只能自问自答了

 $len_2 ? $len_1 : $len_2;

  $dp = array();
  for ($i = 0; $i  $dp[$i][$j - 1] ? $dp[$i - 1][$j] : $dp[$i][$j - 1];
      }
    }
  }

  return $dp[$len_1][$len_2];
}

//拆分字符串
function mbStringToArray($string, $encoding = 'UTF-8') {
  $arrayResult = array();

  while ($iLen = mb_strlen($string, $encoding)) {
    array_push($arrayResult, mb_substr($string, 0, 1, $encoding));
    $string = mb_substr($string, 1, $iLen, $encoding);
  }

  return $arrayResult;
}

//最长公共子序列中文版
function LCS_cn($str1, $str2, $encoding = 'UTF-8') {
  $mb_len1 = mb_strlen($str1, $encoding);
  $mb_len2 = mb_strlen($str2, $encoding);

  $mb_str1 = mbStringToArray($str1, $encoding);
  $mb_str2 = mbStringToArray($str2, $encoding);

  $len = $mb_len1 > $mb_len2 ? $mb_len1 : $mb_len2;

  $dp = array();
  for ($i = 0; $i  $dp[$i][$j - 1] ? $dp[$i - 1][$j] : $dp[$i][$j - 1];
      }
    }
  }

  return $dp[$mb_len1][$mb_len2];
}
相关标签: php lcs