logo

Java-program för att kontrollera om en sträng är en palindrom

En sträng sägs vara ett palindrom om det är likadant om vi börjar läsa det från vänster till höger eller höger till vänster. I den här artikeln kommer vi att lära oss hur man kontrollerar om en sträng är en palindrom i Java.

Så låt oss överväga en sträng str , nu är uppgiften bara att ta reda på att dess omvända sträng är densamma som den är.



Exempel på palindrom:

Inmatning: str = abba
Produktion: Ja

Inmatning: str = nördar
Produktion: Nej

Metoder för Palindrome String i Java

Det finns tre huvudmetoder för att kontrollera strängpalindrom i Java som nämns nedan:



algoritm för binär sökning
  1. Naiv metod
  2. Tvåpekarmetod
  3. Rekursiv metod
  4. Använder StringBuilder

1. Naivt tillvägagångssätt för att kontrollera palindromsträng i Java

Genom att vända den givna strängen och jämföra. Vi kan kontrollera om den givna strängen är ett palindrom genom att jämföra den ursprungliga strängen med dess omvända version.

Nedan är implementeringen av ovanstående tillvägagångssätt:

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; i--) { rev = rev + str.charAt(i); } // Kontrollera om båda strängarna är lika if (str.equals(rev)) { ans = true; } returnera ans; } public static void main(String[] args) { // Inmatningssträng String str = 'geeks'; // Konvertera strängen till gemener str = str.toLowerCase(); boolean A = isPalindrome(str); System.out.println(A); } }>

Produktion
false>

Komplexiteten av ovanstående metod:

Tidskomplexitet: Tidskomplexiteten för den givna koden är O(n), där n är längden på inmatningssträngen. Detta beror på att for-loopen itererar genom varje tecken i strängen en gång för att skapa den omvända strängen.



Utrymmes komplexitet: Kodens rymdkomplexitet är O(n), där n är längden på inmatningssträngen. Detta beror på att den omvända strängen skapas och lagras i en separat strängvariabel, som tar upp utrymme i minnet proportionellt mot längden på inmatningssträngen. Dessutom tar de andra variablerna som används i koden (i, str och ans) en konstant mängd utrymme som är oberoende av indatastorleken.

I exemplet ovan, om vi skriver ABba istället för abba , då bör vi också få utdata som ja . Så vi måste ändra strängens skiftläge till antingen gemener eller versaler innan vi kontrollerar det för en palindrom. Om vi ​​inte gör detta kommer vi att få oväntade resultat. Detta beror på att kompilatorn kontrollerar karaktärerna baserat på deras ASCII värde och ASCII värdet av A är inte samma sak som a .

java få aktuellt datum

2. Tvåpekare tillvägagångssätt för P alindrome-program i Java

Vårt tillvägagångssätt kommer att vara att vi först konverterar strängen till gemener. Sedan tar vi två tips i pekar på början av strängen och j pekar mot slutet av strängen. Fortsätt öka i och minskar j medan i och kontrollera vid varje steg om tecknen vid dessa pekare är desamma eller inte. Om inte så är strängen inte en palindrom annars är den det.

Exempel 1:

char till int java
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'); } }>

Produktion
No>

Komplexiteten av ovanstående metod:

Tidskomplexitet: Tidskomplexiteten för den givna koden är O(n), där n är längden på inmatningssträngen. Detta beror på att while-slingan itererar genom halva strängen för att kontrollera om det är ett palindrom. Eftersom vi bara kontrollerar hälften av strängen är antalet iterationer proportionellt mot n/2, vilket är O(n).

Utrymmes komplexitet: Kodens utrymmeskomplexitet är O(1), eftersom koden bara använder en konstant mängd extra utrymme som är oberoende av indatastorleken. De enda variablerna som används i koden är i, j och str, som var och en tar upp en konstant mängd utrymme. Inget extra utrymme skapas i koden.

Exempel 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'); } }>

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

Komplexiteten av ovanstående metod:

Tidskomplexitet: Tidskomplexiteten för den givna koden är O(n), där n är längden på inmatningssträngen. Detta beror på att while-slingan i `isPalindrome`-metoden itererar genom halva strängen för att kontrollera om det är ett palindrom. Eftersom vi bara kontrollerar hälften av strängen är antalet iterationer proportionellt mot n/2, vilket är O(n).

Utrymmes komplexitet: Kodens utrymmeskomplexitet är O(1), eftersom koden bara använder en konstant mängd extra utrymme som är oberoende av indatastorleken. De enda variablerna som används i koden är i, j, str och str2, som var och en tar upp en konstant mängd utrymme. Inget extra utrymme skapas i koden.

3. Rekursiv syn på P alindrome-program i Java

Tillvägagångssättet är mycket enkelt. Precis som tvåpekarmetoden kommer vi att kontrollera det första och det sista värdet på strängen men den här gången kommer det att ske genom rekursion.

  • Vi kommer att ta två pekare i som pekar mot början av strängen och j pekar mot slutet av strängen.
  • Fortsätt att öka i och minska j medan i
  • Kontrollera om tecknen vid dessa pekare är desamma eller inte. Vi gör detta genom rekursion – (i+1, j-1
  • Om alla tecknen är samma på det i:te och j:te indexet tills i>=j villkoret uppfylls, skriv ut true else false.

Nedan är implementeringen av ovanstående tillvägagångssätt:

latex teckenstorlekar
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) { return true; } // jämför tecknen på dessa pekare if (A.charAt(i) != A.charAt(j)) { return false; } // kontrollerar allt igen rekursivt returnerar isPalindrome(i + 1, j - 1, A); } public static boolean isPalindrome(String A) { return isPalindrome(0, A.length() - 1, A); } // huvudfunktion public static void main(String[] args) { // Inmatningssträng String A = 'geeks'; // Konvertera strängen till gemener A = A.toLowerCase(); boolean str = isPalindrome(A); System.out.println(str); } }>

Produktion
false>

Komplexiteten av ovanstående metod:

Tidskomplexitet: Tidskomplexiteten för den givna koden är O(n), där n är längden på inmatningssträngen. Detta beror på att 'isPalindrome'-funktionen rekursivt anropar sig själv för tecknen på positionerna (i+1, j-1) tills pekarna i och j korsar varandra eller att tecknen vid pekarna inte är lika. Eftersom vi jämför varje tecken i strängen exakt en gång, är tidskomplexiteten O(n).

Utrymmes komplexitet: Kodens rymdkomplexitet är O(n), där n är längden på inmatningssträngen. Detta beror på att varje rekursivt anrop skapar en ny stackram som lagrar de aktuella värdena för funktionsparametrarna och lokala variabler. I värsta fall kan funktionsanropsstacken växa så stor som n/2 (när inmatningssträngen är en palindrom), så rymdkomplexiteten är O(n).

4. Använda StringBuilder Approach i Java

I detta tillvägagångssätt,

  • Först tar vi stränginmatningen från användaren.
  • Sedan skapar vi Stringbuilder-objektet str1″och lagrar värdet av String i det.
  • Metoden reverse() i Stringbuider ger oss den omvända strängen. Ee lagra den omvända strängen i str1.
  • Med hjälp av metoden equals() jämför vi strängens värden, med hjälp av if and else condition check är strängvärdet lika eller inte.

Nedan är implementeringen av ovanstående tillvägagångssätt:

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'); } } }>

Produktion
Not a palindrome String>

Komplexiteten i ovanstående kod:

full huggorm

Tidskomplexitet: Kodens tidskomplexitet är O(n), där n återigen är längden på inmatningssträngen str. Den primära faktorn som bidrar till denna tidskomplexitet är omkastningen av strängen med str1.reverse(). Att vända en sträng på detta sätt har en tidskomplexitet på O(n), där n är längden på strängen. Andra operationer i koden, som att läsa indata och jämföra strängarna, är konstanttidsoperationer och påverkar inte den totala tidskomplexiteten nämnvärt.

Utrymmes komplexitet: Rymdkomplexiteten för den givna Java-koden är O(n), där n är längden på inmatningssträngen str. Detta beror på att koden använder en StringBuilder för att lagra en omvänd kopia av inmatningssträngen, och utrymmet som krävs för StringBuilder är proportionellt mot längden på inmatningssträngen.

Referens

För att veta mer om Palindrome se Program för String Palindrome .