Un palindrome est un mot, une phrase, un nombre ou une autre séquence d'unités qui peut être lu de la même manière dans les deux sens.
Pour vérifier si un mot est un palindrome, j'obtiens le tableau de caractères du mot et je compare les caractères. Je l'ai testé et il semble fonctionner. Cependant, je veux savoir si c'est juste ou s'il y a quelque chose à améliorer.
Voici mon code:
public class Aufg1 {
public static void main(String[] args) {
String wort = "reliefpfpfeiller";
char[] warray = wort.toCharArray();
System.out.println(istPalindrom(warray));
}
public static boolean istPalindrom(char[] wort){
boolean palindrom = false;
if(wort.length%2 == 0){
for(int i = 0; i < wort.length/2-1; i++){
if(wort[i] != wort[wort.length-i-1]){
return false;
}else{
palindrom = true;
}
}
}else{
for(int i = 0; i < (wort.length-1)/2-1; i++){
if(wort[i] != wort[wort.length-i-1]){
return false;
}else{
palindrom = true;
}
}
}
return palindrom;
}
}
Réponses:
Pourquoi pas simplement:
Exemple:
L'entrée est "andna".
i1 sera 0 et i2 sera 4.
Première itération de boucle, nous comparerons
word[0]
etword[4]
. Ils sont égaux, donc nous incrémentons i1 (c'est maintenant 1) et décrémentons i2 (c'est maintenant 3).Nous comparons donc les n. Ils sont égaux, donc nous incrémentons i1 (c'est maintenant 2) et décrémentons i2 (c'est 2).
Maintenant, i1 et i2 sont égaux (ils sont tous les deux 2), donc la condition de la boucle while n'est plus vraie, donc la boucle se termine et nous retournons true.
la source
Vous pouvez vérifier si une chaîne est un palindrome en le comparant à l'inverse de lui-même:
ou pour les versions de Java antérieures à 1.5,
EDIT: @FernandoPelliccioni a fourni une analyse très approfondie de l'efficacité (ou de son absence) de cette solution, à la fois en termes de temps et d'espace. Si vous êtes intéressé par la complexité de calcul de cette question et d'autres solutions possibles à cette question, veuillez la lire!
la source
Une version concise, qui n'implique pas (de manière inefficace) l'initialisation d'un groupe d'objets:
la source
Alternativement, récursivité .
Pour quiconque cherche une solution récursive plus courte, pour vérifier si une chaîne donnée satisfait en tant que palindrome:
OU encore plus court , si vous le souhaitez:
la source
return s.charAt(0) == s.charAt(l - 1) && isPalindrome(s.substring(1, l - 1));
Allez, Java:
la source
également une solution d'apparence différente:
la source
Et voici une solution complète de streaming Java 8 . Un IntStream fournit tous les index jusqu'à la moitié des chaînes, puis une comparaison du début et de la fin est effectuée.
La sortie est:
la source
allMatch
avecallMatch(i -> str.charAt(i) == str.charAt(str.length() - i - 1))
?la source
isPalindrome()
avec"cbb"
?}
la source
J'ai travaillé sur une solution pour une question qui a été marquée comme duplicata de celle-ci. Autant le lancer ici ...
La question demandait une seule ligne pour résoudre ce problème, et je l'ai plutôt considérée comme le palindrome littéraire - donc les espaces, la ponctuation et les majuscules / minuscules peuvent gâcher le résultat.
Voici la solution laide avec une petite classe de test:
Désolé que ce soit un peu méchant - mais l'autre question spécifiait un one-liner.
la source
En vérifiant le palindrome pour la première moitié de la corde avec le reste, ce cas suppose la suppression de tous les espaces blancs.
la source
Je suis nouveau sur Java et je prends votre question comme un défi pour améliorer mes connaissances.
la source
Essayez ceci:
la source
la source
Une autre façon consiste à utiliser char Array
}
la source
Voici mon analyse de la réponse @Greg: componentsprogramming.com/palindromes
Sidenote: Mais, pour moi, il est important de le faire de manière générique . Les exigences sont que la séquence soit itérable bidirectionnellement et que les éléments de la séquence soient comparables en utilisant l'égalité. Je ne sais pas comment le faire en Java, mais, voici une version C ++, je ne connais pas de meilleure façon de le faire pour les séquences bidirectionnelles.
Complexité: temps linéaire,
Si I est RandomAccessIterator: comparaisons floor (n / 2) et floor (n / 2) * 2 itérations
Si I est BidirectionalIterator: floor (n / 2) comparissons et floor (n / 2) * 2 itérations plus (3/2) * n itérations pour trouver le milieu (fonction du milieu)
stockage: O (1)
Pas de mémoire allouée dynamique
la source
Récemment, j'ai écrit un programme palindrome qui n'utilise pas StringBuilder. Une réponse tardive mais cela pourrait être utile à certaines personnes.
la source
En utilisant stack, cela peut être fait comme ça
la source
la source
Étonnant combien de solutions différentes à un problème aussi simple existent! En voici un autre.
la source
la source
Pourquoi pas simplement:
la source
la source
la source
Je cherchais une solution qui ne fonctionnait pas seulement pour les palindromes comme ...
... mais aussi pour ...
Itératif : cela s'est avéré être une bonne solution.
Récursif . Je pense que cette solution ne devrait pas être bien pire que la solution itérative. Est-ce un peu merdique que nous devons extraire l'étape de nettoyage de la méthode pour éviter un traitement inutile.
Inverser : cela s'est avéré être une solution coûteuse.
Tous les crédits aux gars qui ont répondu dans cet article et ont mis en lumière le sujet.
la source
Ne considérant pas les lettres dans les mots
———
la source
Ici, vous pouvez vérifier dynamiquement un certain nombre de chaînes de palindrome
la source
OMI, la méthode récursive est la plus simple et la plus claire.
la source
ici, en recherchant le plus grand palindrome d'une chaîne, toujours à partir du 1er caractère.
la source
Extrait de code:
la source