Kontroller, om en streng er en palindrom i Java

1. Introduktion

I denne artikel skal vi se, hvordan vi kan kontrollere, om en given Snor er et palindrom, der bruger Java.

En palindrom er et ord, en sætning, et tal eller andre sekvenser af tegn, der læser det samme bagud som fremad, såsom "fru" eller "racerbil".

2. Løsninger

I de følgende afsnit vil vi se på de forskellige måder at kontrollere, om en given Snor er en palindrom eller ej.

2.1. En enkel tilgang

Vi kan samtidig begynde at gentage det givne snor frem og tilbage, et tegn ad gangen. Hvis der er en match, fortsætter sløjfen; Ellers går sløjfen ud:

public boolean isPalindrome (String text) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); int længde = ren. længde (); int fremad = 0; int bagud = længde - 1; mens (bagud> fremad) {char forwardChar = clean.charAt (forward ++); char backwardChar = clean.charAt (bagud--); hvis (forwardChar! = backwardChar) returnerer false; } returner sandt }

2.2. Omvendt streng

Der er et par forskellige implementeringer, der passer til denne brugssag: vi kan gøre brug af API-metoderne fra StringBuilder og StringBuffer klasser, når vi kontrollerer for palindromer, eller vi kan vende om Snor uden disse klasser.

Lad os kigge på kodeimplementeringerne uden hjælper-API'erne først:

public boolean isPalindromeReverseTheString (String text) {StringBuilder reverse = new StringBuilder (); Streng ren = text.replaceAll ("\ s +", "") .toLowerCase (); char [] almindelig = clean.toCharArray (); for (int i = almindelig.længde - 1; i> = 0; i--) {omvendt.append (almindelig [i]); } returnere (reverse.toString ()). er lig med (ren); }

I ovenstående uddrag gentager vi simpelthen det givne Snor fra det sidste tegn og tilføj hvert tegn til det næste tegn, hele vejen igennem til det første tegn, hvorved det givne vendes Snor.

Endelig tester vi for lighed mellem det givne Snor og omvendt Snor.

Den samme adfærd kunne opnås ved hjælp af API-metoder.

Lad os se en hurtig demonstration:

public boolean isPalindromeUsingStringBuilder (String text) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); StringBuilder almindelig = ny StringBuilder (ren); StringBuilder reverse = plain.reverse (); return (reverse.toString ()). er lig med (ren); } public boolean isPalindromeUsingStringBuffer (String text) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); StringBuffer almindelig = ny StringBuffer (ren); StringBuffer reverse = plain.reverse (); return (reverse.toString ()). er lig med (ren); }

I kodestykket påberåber vi os baglæns() metode fra StringBuilder og StringBuffer API til at vende det givne Snor og test for lighed.

2.3. Ved brug af Strøm API

Vi kan også bruge en IntStream at give en løsning:

public boolean isPalindromeUsingIntStream (String text) {String temp = text.replaceAll ("\ s +", "") .toLowerCase (); returnere IntStream.range (0, temp.length () / 2) .noneMatch (i -> temp.charAt (i)! = temp.charAt (temp.length () - i - 1)); }

I uddraget ovenfor bekræfter vi, at ingen af ​​parparterne fra hver ende af Snor opfylder Prædikat tilstand.

2.4. Brug af rekursion

Rekursion er en meget populær metode til at løse denne slags problemer. I det viste eksempel gentager vi rekursivt det givne Snor og test for at finde ud af, om det er et palindrom eller ej:

public boolean isPalindromeRecursive (String text) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); returnere rekursivPalindrome (ren, 0, ren. længde () - 1); } privat boolsk rekursivPalindrome (strengtekst, int fremad, int bagud) {if (fremad == baglæns) {return sand; } if ((text.charAt (forward))! = (text.charAt (backward))) {return false; } hvis (fremad <bagud + 1) {return rekursivPalindrome (tekst, frem + 1, bagud - 1); } returner sandt }

3. Konklusion

I denne hurtige vejledning så vi, hvordan vi fandt ud af, om en given Snor er en palindrom eller ej.

Som altid er kodeeksemplerne til denne artikel tilgængelige på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found