J'ai besoin d'aide pour créer une plaque d'immatriculation (longueur de 6 caractères) à partir de chaînes de longueur égale ou inégale.Création de plaques d'immatriculation à partir de chaînes différentes mais similaires
Exemple 1:
$str1 = "YE37";
$str2 = "TE37";
$str3 = "LYTE";
Quand je Combine, il devrait me donner "LYTE37". Je dois tous les utiliser pour formuler une assiette. Je peux trouver la plus longue séquence commune entre $ str1 et $ str2 est "E37" mais pas sûr "Y" ou "T" vient en premier (ie, "YTE37" ou "TYE37") "alors je peux combiner avec $ str3 en utilisant le la plus longue séquence commune ("YTE") qui devait me donner "LYTE37"
Exemple 2:. "YLF3", "EYLF" et "YLF37" devrait me donner "EYLF37"
J'utilise ce qui suit. fonction qui trouve la plus longue séquence commune
$string_1="YE37";
$string_2="TE37";
$S =get_longest_common_subsequence($string_1, $string_2); // $S is "E37"
function get_longest_common_subsequence($string_1, $string_2)
{
$string_1_length = strlen($string_1);
$string_2_length = strlen($string_2);
$return = '';
if ($string_1_length === 0 || $string_2_length === 0)
{
// No similarities
return $return;
}
$longest_common_subsequence = array();
// Initialize the CSL array to assume there are no similarities
$longest_common_subsequence = array_fill(0, $string_1_length, array_fill(0, $string_2_length, 0));
$largest_size = 0;
for ($i = 0; $i < $string_1_length; $i++)
{
for ($j = 0; $j < $string_2_length; $j++)
{
// Check every combination of characters
if ($string_1[$i] === $string_2[$j])
{
// These are the same in both strings
if ($i === 0 || $j === 0)
{
// It's the first character, so it's clearly only 1 character long
$longest_common_subsequence[$i][$j] = 1;
}
else
{
// It's one character longer than the string from the previous character
$longest_common_subsequence[$i][$j] = $longest_common_subsequence[$i - 1][$j - 1] + 1;
}
if ($longest_common_subsequence[$i][$j] > $largest_size)
{
// Remember this as the largest
$largest_size = $longest_common_subsequence[$i][$j];
// Wipe any previous results
$return = '';
// And then fall through to remember this new value
}
if ($longest_common_subsequence[$i][$j] === $largest_size)
{
// Remember the largest string(s)
$return = substr($string_1, $i - $largest_size + 1, $largest_size);
}
}
// Else, $CSL should be set to 0, which it was already initialized to
}
}
// Return the list of matches
return $return;
}
je besoin d'un algorithme qui utilise ces chaînes et crée une plaque d'immatriculation.
@ Poiz, merci pour répondre. Cela fonctionne pour les deux exemples ci-dessus. Mais cela ne fonctionne pas bien pour "27RD", "E27", "AERD" car il montre "RDEA27" mais en fait la plaque est "AE27RD". Je pense que le mieux serait que nous analysions sa plus longue séquence commune et que nous la combinions en conséquence. –