56 votes

Comment vérifier si la chaîne donnée est palindrome?

Définition:

Un palindrome est un mot, une phrase, un nombre ou une autre séquence d'unités qui a la propriété de lire le même dans les deux sens.

Comment vérifier si la chaîne donnée est un palindrome?

C’était l’une des questions les plus fréquemment posées par la FAIQ il ya un certain temps, mais elle utilisait surtout du C.

Rechercher des solutions dans toutes les langues possibles.

46voto

ConroyP Points 24021

Exemple PHP :

 $string = "A man, a plan, a canal, Panama";

function is_palindrome($string)
{
    $a = strtolower(preg_replace("/[^A-Za-z0-9]/","",$string));
    return $a==strrev($a);
}
 

Supprime tous les caractères non alphanumériques (espaces, virgules, points d'exclamation, etc.) pour permettre des phrases complètes comme ci-dessus, ainsi que des mots simples.

34voto

Paulius Points 4148

Windows XP (peut également fonctionner sur 2000) ou un script BATCH ultérieur:

 @echo off

call :is_palindrome %1
if %ERRORLEVEL% == 0 (
    echo %1 is a palindrome
) else (
    echo %1 is NOT a palindrome
)
exit /B 0

:is_palindrome
    set word=%~1
    set reverse=
    call :reverse_chars "%word%"
    set return=1
    if "$%word%" == "$%reverse%" (
        set return=0
    )
exit /B %return%

:reverse_chars
    set chars=%~1
    set reverse=%chars:~0,1%%reverse%
    set chars=%chars:~1%
    if "$%chars%" == "$" (
        exit /B 0
    ) else (
        call :reverse_chars "%chars%"
    )
exit /B 0
 

29voto

Tnilsson Points 1450

Méta-code agnostique en langue alors ...

 rev = StringReverse(originalString)
return ( rev == originalString );
 

24voto

David Schmitt Points 29384

Algorithme en place C # . Tout prétraitement, comme l'insensibilité à la casse ou la suppression d'espaces et de ponctuation, doit être effectué avant de passer à cette fonction.

 boolean IsPalindrome(string s) {
    for (int i = 0; i < s.Length / 2; i++)
    {
        if (s[i] != s[s.Length - 1 - i]) return false;
    }
    return true;
}
 


Édition: suppression de " +1 " inutiles en condition de boucle et utilisation de la comparaison enregistrée pour supprimer la comparaison de longueur redondante. Merci aux commentateurs!

15voto

aku Points 54867

C #: LINQ

 var str = "a b a";
var test = Enumerable.SequenceEqual(str.ToCharArray(), 
           str.ToCharArray().Reverse());
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X