logo

Programme Java pour vérifier si une chaîne est un Palindrome

Une chaîne est dite palindrome si elle est identique si on commence à la lire de gauche à droite ou de droite à gauche. Dans cet article, nous allons apprendre comment vérifier si une chaîne est un palindrome en Java.

Considérons donc une chaîne str , maintenant la tâche consiste simplement à découvrir que sa chaîne inversée est la même qu'elle est.



Exemple de palindrome :

Saisir: str = abba
Sortir: Oui

Saisir: str = geeks
Sortir: Non

Méthodes pour la chaîne palindrome en Java

Il existe trois méthodes principales pour vérifier le palindrome de chaîne en Java, comme mentionné ci-dessous :



chaîne trouver c++
  1. Méthode naïve
  2. Méthode à deux pointeurs
  3. Méthode récursive
  4. Utilisation du StringBuilder

1. Approche naïve pour vérifier la chaîne palindrome en Java

En inversant la chaîne donnée et en comparant. Nous pouvons vérifier si la chaîne donnée est un palindrome en comparant la chaîne originale avec sa version inversée.

saisir une chaîne en java

Vous trouverez ci-dessous la mise en œuvre de l’approche ci-dessus :

Java
// Java Program to implement // Basic Approach to check if // string is a Palindrome import java.io.*; // Driver Class class GFG { // main function public static boolean isPalindrome(String str) { // Initializing an empty string to store the reverse // of the original str String rev = ''; // Initializing a new boolean variable for the // answer boolean ans = false; for (int i = str.length() - 1; i>= 0 ; je--) { rev = rev + str.charAt(i); } // Vérifier si les deux chaînes sont égales if (str.equals(rev)) { ans = true; } return ans; } public static void main(String[] args) { // Chaîne d'entrée String str = 'geeks'; // Convertit la chaîne en minuscules str = str.toLowerCase(); booléen A = isPalindrome(str); System.out.println(A); } }>

Sortir
false>

La complexité de la méthode ci-dessus :

Complexité temporelle : La complexité temporelle du code donné est O(n), où n est la longueur de la chaîne d'entrée. En effet, la boucle for parcourt chaque caractère de la chaîne une fois pour créer la chaîne inversée.



Complexité spatiale : La complexité spatiale du code est O(n), où n est la longueur de la chaîne d'entrée. En effet, la chaîne inversée est créée et stockée dans une variable de chaîne distincte, qui occupe un espace en mémoire proportionnel à la longueur de la chaîne d'entrée. De plus, les autres variables utilisées dans le code (i, str et ans) occupent une quantité constante d'espace, indépendante de la taille d'entrée.

Dans l’exemple ci-dessus, si l’on écrit ABba au lieu de abba , alors nous devrions également obtenir le résultat sous la forme Oui . Nous devons donc changer la casse de la chaîne en minuscule ou en majuscule avant de vérifier s'il s'agit d'un palindrome. Si nous ne le faisons pas, nous obtiendrons des résultats inattendus. C'est parce que le compilateur vérifie les caractères en fonction de leur ASCII la valeur et la ASCII valeur de UN n'est pas la même chose que un .

2. Approche à deux pointeurs pour P Programme alindrome en Java

Notre approche sera de convertir d’abord la chaîne en minuscules. Ensuite, nous prendrons deux indicateurs je pointant vers le début de la chaîne et j pointant vers la fin de la chaîne. Continuez à augmenter je et décrémenter j alors que je et à chaque étape, vérifiez si les caractères de ces pointeurs sont identiques ou non. Sinon, la chaîne n'est pas un palindrome, sinon elle l'est.

Exemple 1:

Java
// Java program to check whether a // string is a Palindrome // Using two pointing variables // Main class public class GFG { // Method // Returning true if string is palindrome static boolean isPalindrome(String str) { // Pointers pointing to the beginning // and the end of the string int i = 0, j = str.length() - 1; // While there are characters to compare while (i < j) { // If there is a mismatch if (str.charAt(i) != str.charAt(j)) return false; // Increment first pointer and // decrement the other i++; j--; } // Given string is a palindrome return true; } // Method 2 // main driver method public static void main(String[] args) { // Input string String str = 'geeks'; // Convert the string to lowercase str = str.toLowerCase(); // passing bool function till holding true if (isPalindrome(str)) // It is a palindrome System.out.print('Yes'); else // Not a palindrome System.out.print('No'); } }>

Sortir
No>

La complexité de la méthode ci-dessus :

Complexité temporelle : La complexité temporelle du code donné est O(n), où n est la longueur de la chaîne d'entrée. En effet, la boucle while parcourt la moitié de la chaîne pour vérifier s'il s'agit d'un palindrome. Puisque nous ne vérifions que la moitié de la chaîne, le nombre d’itérations est proportionnel à n/2, ce qui correspond à O(n).

exemple de nom d'utilisateur

Complexité spatiale : La complexité spatiale du code est O(1), car le code n'utilise qu'une quantité constante d'espace supplémentaire indépendante de la taille d'entrée. Les seules variables utilisées dans le code sont i, j et str, qui occupent chacune une quantité d'espace constante. Aucun espace supplémentaire n'est créé dans le code.

Exemple 2 :

Java
// Java Program to check Whether // the String is Palindrome // or Not // Main class class GFG { // Method 1 // Returns true if string is a palindrome static boolean isPalindrome(String str) { // Pointers pointing to the beginning // and the end of the string int i = 0, j = str.length() - 1; // While there are characters to compare while (i < j) { // If there is a mismatch if (str.charAt(i) != str.charAt(j)) return false; // Increment first pointer and // decrement the other i++; j--; } // Given string is a palindrome return true; } // Main driver method public static void main(String[] args) { String str = 'geeks'; String str2 = 'RACEcar'; // Change strings to lowercase str = str.toLowerCase(); str2 = str2.toLowerCase(); // For string 1 System.out.print('String 1 :'); if (isPalindrome(str)) System.out.print('It is a palindrome'); else System.out.print('It is not a palindrome'); // new line for better readability System.out.println(); // For string 2 System.out.print('String 2 :'); if (isPalindrome(str2)) System.out.print('It is a palindrome'); else System.out.print('It is not a palindrome'); } }>

Sortir
String 1 :It is not a palindrome String 2 :It is a palindrome>

La complexité de la méthode ci-dessus :

Complexité temporelle : La complexité temporelle du code donné est O(n), où n est la longueur de la chaîne d'entrée. En effet, la boucle while de la méthode `isPalindrome` parcourt la moitié de la chaîne pour vérifier s'il s'agit d'un palindrome. Puisque nous ne vérifions que la moitié de la chaîne, le nombre d’itérations est proportionnel à n/2, ce qui correspond à O(n).

Complexité spatiale : La complexité spatiale du code est O(1), car le code n'utilise qu'une quantité constante d'espace supplémentaire indépendante de la taille d'entrée. Les seules variables utilisées dans le code sont i, j, str et str2, qui occupent chacune une quantité d'espace constante. Aucun espace supplémentaire n'est créé dans le code.

3. Approche récursive pour P Programme alindrome en Java

L'approche est très simple. Tout comme pour l’approche à deux pointeurs, nous vérifierons la première et la dernière valeur de la chaîne mais cette fois ce sera par récursion.

  • Nous prendrons deux pointeurs i pointant vers le début de la chaîne et j pointant vers la fin de la chaîne.
  • Continuez à incrémenter i et à décrémenter j pendant que je
  • Vérifiez si les caractères de ces pointeurs sont identiques ou non. Nous faisons cela par récursivité – (i+1, j-1
  • Si tous les caractères sont les mêmes sur les ième et jième index jusqu'à ce que la condition i>=j soit satisfaite, imprimez vrai sinon faux.

Vous trouverez ci-dessous la mise en œuvre de l’approche ci-dessus :

Java
// Java program to check whether a // string is a Palindrome using recursion import java.io.*; // Driver Class class GFG { public static boolean isPalindrome(int i, int j, String A) { // comparing the two pointers if (i>= j) { renvoie vrai ; } // comparaison des caractères sur ces pointeurs if (A.charAt(i) != A.charAt(j)) { return false; } // tout vérifier à nouveau de manière récursive return isPalindrome(i + 1, j - 1, A); } public static boolean isPalindrome(String A) { return isPalindrome(0, A.length() - 1, A); } // fonction principale public static void main(String[] args) { // Chaîne d'entrée String A = 'geeks'; // Convertit la chaîne en minuscules A = A.toLowerCase(); boolean str = isPalindrome(A); System.out.println(str); } }>

Sortir
false>

La complexité de la méthode ci-dessus :

Complexité temporelle : La complexité temporelle du code donné est O(n), où n est la longueur de la chaîne d'entrée. En effet, la fonction `isPalindrome` s'appelle récursivement pour les caractères aux positions (i+1, j-1) jusqu'à ce que les pointeurs i et j se croisent ou que les caractères aux pointeurs ne soient pas égaux. Puisque nous comparons chaque caractère de la chaîne exactement une fois, la complexité temporelle est O(n).

fonctionnalités de java8

Complexité spatiale : La complexité spatiale du code est O(n), où n est la longueur de la chaîne d'entrée. En effet, chaque appel récursif crée un nouveau cadre de pile qui stocke les valeurs actuelles des paramètres de fonction et des variables locales. Dans le pire des cas, la pile d'appels de fonction peut atteindre n/2 (lorsque la chaîne d'entrée est un palindrome), donc la complexité spatiale est O(n).

4. Utilisation de l'approche StringBuilder en Java

Dans cette approche,

  • Tout d’abord, nous prenons l’entrée String de l’utilisateur.
  • Ensuite, nous créons l'objet Stringbuilder str1″ et y stockons la valeur de String.
  • La méthode reverse() dans Stringbuilder nous donne la chaîne inversée. Ee stocke cette chaîne inversée dans str1.
  • À l’aide de la méthode equals(), nous comparons les valeurs de la chaîne, à l’aide des conditions if et else, vérifions que la valeur de la chaîne est similaire ou non.

Vous trouverez ci-dessous la mise en œuvre de l’approche ci-dessus :

Java
import java.util.Scanner; public class Main { public static void main(String[] args) { String str = 'GeeksForGeeks'; // String for testing StringBuilder str1 = new StringBuilder(str); str1.reverse(); if (str.equals(str1.toString())) { System.out.println('Palindrome String'); } else { System.out.println('Not a palindrome String'); } } }>

Sortir
Not a palindrome String>

La complexité du code ci-dessus :

Complexité temporelle : La complexité temporelle du code est O(n), où n est à nouveau la longueur de la chaîne d'entrée str. Le principal facteur contribuant à cette complexité temporelle est l'inversion de la chaîne à l'aide de str1.reverse(). Inverser une chaîne de cette manière a une complexité temporelle de O(n), où n est la longueur de la chaîne. D'autres opérations dans le code, telles que la lecture de l'entrée et la comparaison des chaînes, sont des opérations à temps constant et n'ont pas d'impact significatif sur la complexité temporelle globale.

mylivecricket pour le cricket en direct

Complexité spatiale : La complexité spatiale du code Java donné est O(n), où n est la longueur de la chaîne d'entrée str. En effet, le code utilise un StringBuilder pour stocker une copie inversée de la chaîne d'entrée et l'espace requis pour le StringBuilder est proportionnel à la longueur de la chaîne d'entrée.

Référence

Pour en savoir plus sur Palindrome, référez-vous Programme pour le palindrome à cordes .