Java programma, lai pārbaudītu, vai virkne ir palindroms

Stīgu sauc par palindromu, ja tā ir vienāda, ja mēs sākam to lasīt no kreisās uz labo vai no labās uz kreiso. Šajā rakstā mēs uzzināsim, kā pārbaudīt, vai virkne ir Java palindroms.

Tātad, aplūkosim virkni str , tagad uzdevums ir tikai noskaidrot ar tā apgriezto virkni ir tāda pati kā tā ir.

Palindroma piemērs:

Ievade: str = abba
Izvade:

Ievade: str = geeks
Izvade:

Metodes palindromu virknei Java valodā

Ir trīs galvenās metodes, lai pārbaudītu virknes palindromu Java, kā minēts tālāk:

  1. Naiva metode
  2. Divu rādītāju metode
  3. Rekursīvā metode
  4. StringBuilder izmantošana

1. Naiva pieeja, lai pārbaudītu palindromu virkni Java

Apgriežot doto virkni un salīdzinot. Mēs varam pārbaudīt, vai dotā virkne ir palindroms, salīdzinot sākotnējo virkni ar tās apgriezto versiju.

Tālāk ir aprakstīta iepriekš minētās pieejas īstenošana.

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); } // Pārbaude, vai abas virknes ir vienādas if (str.equals(rev)) { ans = true; } return ans; } public static void main(String[] args) { // Ievades virkne String str = 'geeks'; // Pārvērst virkni uz mazajiem burtiem str = str.toLowerCase(); Būla vērtība A = isPalindroms(str); System.out.println(A); } } 

Izvade
false 

Iepriekš minētās metodes sarežģītība:

Laika sarežģītība: Dotā koda laika sarežģītība ir O(n), kur n ir ievades virknes garums. Tas ir tāpēc, ka for cilpa atkārto katru virknes rakstzīmi vienu reizi, lai izveidotu apgriezto virkni.

Kosmosa sarežģītība: Koda telpas sarežģītība ir O(n), kur n ir ievades virknes garums. Tas ir tāpēc, ka apgrieztā virkne tiek izveidota un saglabāta atsevišķā virknes mainīgajā, kas aizņem vietu atmiņā proporcionāli ievades virknes garumam. Turklāt citi kodā izmantotie mainīgie (i, str un ans) aizņem nemainīgu vietas daudzumu, kas nav atkarīgs no ievades lieluma.

Iepriekš minētajā piemērā, ja mēs rakstām ABba vietā abba , tad arī mums vajadzētu iegūt izvadi kā . Tātad, mums ir jāmaina virknes reģistrs uz mazajiem vai lielajiem burtiem, pirms mēs pārbaudām, vai tajā nav palindroms. Ja mēs to nedarīsim, mēs iegūsim negaidītus rezultātus. Tas ir tāpēc, ka kompilators pārbauda rakstzīmes, pamatojoties uz to ASCII vērtība un ASCII vērtība A nav tas pats, kas a .

2. Divu rādītāju pieeja P alindrom programma Java valodā

Mūsu pieeja būs tāda, ka vispirms mēs pārveidosim virkni uz mazajiem burtiem. Pēc tam mēs ņemsim divas norādes i norādot uz virknes sākumu un j norādot uz virknes galu. Turpiniet palielināt i un samazinās j kamēr i un katrā solī pārbaudiet, vai rakstzīmes šajos rādītājos ir vienādas vai nē. Ja nē, tad stīga nav palindroms, citādi tā ir.

1. piemērs:

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

Izvade
No 

Iepriekš minētās metodes sarežģītība:

Laika sarežģītība: Dotā koda laika sarežģītība ir O(n), kur n ir ievades virknes garums. Tas ir tāpēc, ka while cilpa atkārtojas caur pusi no virknes, lai pārbaudītu, vai tas ir palindroms. Tā kā mēs pārbaudām tikai pusi no virknes, iterāciju skaits ir proporcionāls n/2, kas ir O(n).

Kosmosa sarežģītība: Koda telpas sarežģītība ir O(1), jo kods izmanto tikai nemainīgu papildu vietas daudzumu, kas nav atkarīgs no ievades lieluma. Vienīgie kodā izmantotie mainīgie ir i, j un str, kas katrs aizņem nemainīgu vietu. Kodā netiek izveidota papildu vieta.

2. piemērs:

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

Izvade
String 1 :It is not a palindrome String 2 :It is a palindrome 

Iepriekš minētās metodes sarežģītība:

Laika sarežģītība: Dotā koda laika sarežģītība ir O(n), kur n ir ievades virknes garums. Tas ir tāpēc, ka metodi “isPalindroms” cilpa while atkārtojas caur pusi no virknes, lai pārbaudītu, vai tā ir palindroms. Tā kā mēs pārbaudām tikai pusi no virknes, iterāciju skaits ir proporcionāls n/2, kas ir O(n).

Kosmosa sarežģītība: Koda telpas sarežģītība ir O(1), jo kods izmanto tikai nemainīgu papildu vietas daudzumu, kas nav atkarīgs no ievades lieluma. Vienīgie kodā izmantotie mainīgie ir i, j, str un str2, kas katrs aizņem nemainīgu vietu. Kodā netiek izveidota papildu vieta.

3. Rekursīvā pieeja P alindrom programma Java valodā

Pieeja ir ļoti vienkārša. Tāpat kā divu rādītāju pieeja, mēs pārbaudīsim pirmo un pēdējo virknes vērtību, bet šoreiz tas būs ar rekursijas palīdzību.

  • Mēs ņemsim divus rādītājus i, kas norāda uz virknes sākumu, un j, kas norāda uz virknes beigām.
  • Turpiniet palielināt i un samazināt j, kamēr i
  • Pārbaudiet, vai rakstzīmes šajos rādītājos ir vienādas. Mēs to darām, izmantojot rekursiju – (i+1, j-1
  • Ja visas rakstzīmes ir vienādas i-tajā un j-tajā rādītājā, līdz nosacījums i>=j ir izpildīts, drukājiet patiesu vai nepatiesu.

Tālāk ir aprakstīta iepriekš minētās pieejas īstenošana.

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; } // šo rādītāju rakstzīmju salīdzināšana if (A.charAt(i) != A.charAt(j)) { return false; } // vēlreiz pārbaudot visu rekursīvi return isPalindrom(i + 1, j - 1, A); } public static Boolean isPalindrom(String A) { return isPalindrom(0, A.length() - 1, A); } // galvenā funkcija public static void main(String[] args) { // Ievades virkne String A = 'geeks'; // Pārvērst virkni uz mazajiem burtiem A = A.toLowerCase(); Būla str = isPalindroms(A); System.out.println(str); } } 

Izvade
false 

Iepriekš minētās metodes sarežģītība:

Laika sarežģītība: Dotā koda laika sarežģītība ir O(n), kur n ir ievades virknes garums. Tas ir tāpēc, ka funkcija 'isPalindroms' rekursīvi izsauc sevi pozīcijās (i+1, j-1) esošajām rakstzīmēm, līdz rādītāji i un j krustojas viens ar otru vai arī rakstzīmes rādītājos nav vienādas. Tā kā mēs salīdzinām katru virknes rakstzīmi precīzi vienu reizi, laika sarežģītība ir O(n).

Kosmosa sarežģītība: Koda telpas sarežģītība ir O(n), kur n ir ievades virknes garums. Tas ir tāpēc, ka katrs rekursīvs izsaukums izveido jaunu steka rāmi, kurā tiek saglabātas funkcijas parametru un vietējo mainīgo pašreizējās vērtības. Sliktākajā gadījumā funkciju izsaukuma steks var pieaugt līdz n/2 (ja ievades virkne ir palindroms), tāpēc telpas sarežģītība ir O(n).

4. StringBuilder pieejas izmantošana Java

Šajā pieejā

  • Pirmkārt, mēs ņemam String ievadi no lietotāja.
  • Pēc tam mēs izveidojam Stringbuilder objektu str1″ un saglabājam tajā String vērtību.
  • Reverse() metode programmā Stringbuider dod mums apgriezto virkni. Uzglabājiet šo apgriezto virkni str1.
  • Ar vienāds() metodes palīdzību mēs salīdzinām virknes vērtības, ar if un else nosacījumu pārbaudes palīdzību, vai virknes vērtība ir līdzīga vai nav.

Tālāk ir aprakstīta iepriekš minētās pieejas īstenošana.

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

Izvade
Not a palindrome String 

Iepriekš minētā koda sarežģītība:

Laika sarežģītība: Koda laika sarežģītība ir O(n), kur n atkal ir ievades virknes str garums. Galvenais faktors, kas veicina šo laika sarežģītību, ir virknes apvēršana, izmantojot str1.reverse(). Virknes apvēršanai šādā veidā laika sarežģītība ir O(n), kur n ir virknes garums. Citas koda darbības, piemēram, ievades lasīšana un virkņu salīdzināšana, ir pastāvīga laika darbības un būtiski neietekmē kopējo laika sarežģītību.

Kosmosa sarežģītība: Dotā Java koda telpas sarežģītība ir O(n), kur n ir ievades virknes str garums. Tas ir tāpēc, ka kods izmanto StringBuilder, lai saglabātu ievades virknes apgriezto kopiju, un vieta, kas nepieciešama StringBuilder, ir proporcionāla ievades virknes garumam.

Atsauce

Lai uzzinātu vairāk par Palindromu, skatiet Programma stīgu palindromam .