J'ai trouvé une explication claire de la solution here. Merci à Justin pour ce lien.
Vous pouvez y trouver des implémentations Python et Java de l'algorithme (l'implémentation C++ contient des erreurs).
Et voici l'implémentation C# qui est juste une traduction de ces algorithmes.
public static int LongestPalindrome(string seq)
{
int Longest = 0;
List<int> l = new List<int>();
int i = 0;
int palLen = 0;
int s = 0;
int e = 0;
while (i<seq.Length)
{
if (i > palLen && seq[i-palLen-1] == seq[i])
{
palLen += 2;
i += 1;
continue;
}
l.Add(palLen);
Longest = Math.Max(Longest, palLen);
s = l.Count - 2;
e = s - palLen;
bool found = false;
for (int j = s; j > e; j--)
{
int d = j - e - 1;
if (l[j] == d)
{
palLen = d;
found = true;
break;
}
l.Add(Math.Min(d, l[j]));
}
if (!found)
{
palLen = 1;
i += 1;
}
}
l.Add(palLen);
Longest = Math.Max(Longest, palLen);
return Longest;
}
Ceci est une copie exacte de l'autre question, celle que vous avez vous-même liée. Si vous ne comprenez pas la réponse, postez un commentaire, n'ouvrez pas une nouvelle question! (Pour ce que ça vaut, je pense que le blog lié ici a une explication raisonnablement claire même si vous ignorez complètement le code Haskell.) – ShreevatsaR
Il n'y avait aucune mention sur le langage de programmation qu'il devrait être écrit – Hun1Ahpu
Oui, bon point; J'ai toujours pensé que Stack Overflow ne dispose pas d'un mécanisme permettant à plusieurs personnes de poser la même question ... si vous avez assez de réputation, je suppose que vous pourriez éditer la question et espérer qu'elle aboutisse à une meilleure réponse, mais ce n'est pas idéal. – ShreevatsaR