Longest common substring is a function that can be useful once in a while. Here’s a PHP implementation. Be forewarned, this runs in O(mn)
time.
function longest_common_substring($string1, $string2) {
$L = array();
$length = 0;
$pos = 0;
$array1 =str_split($string1);
$array2 =str_split($string2);
foreach ($array1 as $i => $c1) {
$L[$i] = array();
foreach ($array2 as $j => $c2) {
$L[$i][$j] = 0;
if ($c1 == $c2) {
if ($i == 0 || $j == 0) {
// initialize that this character position exists.
$L[$i][$j] = 1;
} else {
// increment previous or reset.
if (isset($L[$i-1][$j-1])) {
$L[$i][$j] = $L[$i-1][$j-1] + 1;
} else {
$L[$i][$j] = 0;
}
}
if ($L[$i][$j] > $length) {
$length = $L[$i][$j];
}
if ((isset($L[$i][$j]))&&($L[$i][$j] == $length)) {
$pos = $i;
}
}
}
}
if ($length > 0) {
return substr($string1, $pos - $length + 1, $length);
} else {
return '';
}
}
Usage:
$string1 = 'sadjjasdf this is the string sdlkjhaskl';
$string2 = 'eriuhysdfnbasi this is the stringbhdjubsdi';
echo longest_common_substring($string1, $string2);