Sjekk om en streng er et palindrom i Java

1. Introduksjon

I denne artikkelen skal vi se hvordan vi kan sjekke om en gitt String er et palindrom som bruker Java.

En palindrom er et ord, uttrykk, nummer eller andre sekvenser av tegn som leser det samme bakover som fremover, for eksempel "fru" eller "racerbil".

2. Løsninger

I de følgende avsnittene vil vi se på de forskjellige måtene å sjekke om en gitt String er en palindrom eller ikke.

2.1. En enkel tilnærming

Vi kan samtidig begynne å gjenta det gitte streng frem og tilbake, ett tegn om gangen. Hvis det er en kamp, ​​fortsetter sløyfen; Ellers går løkken ut:

public boolean isPalindrome (String text) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); int lengde = ren.lengde (); int fremover = 0; int bakover = lengde - 1; mens (bakover> fremover) {char forwardChar = clean.charAt (fremover ++); char backwardChar = clean.charAt (bakover--); hvis (forwardChar! = backwardChar) returnerer false; } returner sant; }

2.2. Å snu strengen

Det er noen få forskjellige implementeringer som passer til denne brukssaken: vi kan bruke API-metodene fra StringBuilder og StringBuffer klasser når vi ser etter palindromer, eller vi kan reversere String uten disse klassene.

La oss ta en titt på kodeimplementeringene uten API-ene for hjelperen først:

public boolean isPalindromeReverseTheString (String text) {StringBuilder reverse = new StringBuilder (); Streng ren = text.replaceAll ("\ s +", "") .toLowerCase (); char [] vanlig = clean.toCharArray (); for (int i = vanlig.lengde - 1; i> = 0; i--) {revers.append (vanlig [i]); } returner (revers.toString ()). er lik (ren); }

I utdraget ovenfor gjentar vi bare det gitte String fra det siste tegnet og legg hvert tegn til det neste tegnet, hele veien til det første tegnet, og reverser dermed det gitte String.

Til slutt tester vi for likhet mellom det gitte String og snudd String.

Den samme oppførselen kan oppnås ved hjelp av API-metoder.

La oss se en rask demonstrasjon:

public boolean isPalindromeUsingStringBuilder (String text) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); StringBuilder vanlig = ny StringBuilder (ren); StringBuilder revers = vanlig.omvendt (); return (revers.toString ()). er lik (ren); } public boolean isPalindromeUsingStringBuffer (String text) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); StringBuffer vanlig = ny StringBuffer (ren); StringBuffer omvendt = vanlig.omvendt (); return (revers.toString ()). er lik (ren); }

I kodebiten påkaller vi omvendt() metoden fra StringBuilder og StringBuffer API for å reversere det gitte String og test for likeverd.

2.3. Ved hjelp av Strøm API

Vi kan også bruke en IntStream for å gi en løsning:

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

I utdraget ovenfor bekrefter vi at ingen av parene med tegn fra hver ende av String oppfyller Predikere tilstand.

2.4. Bruke rekursjon

Rekursjon er en veldig populær metode for å løse denne typen problemer. I eksemplet som er vist, gjentar vi rekursivt det gitte String og test for å finne ut om det er et palindrom eller ikke:

public boolean isPalindromeRecursive (String text) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); retur rekursivPalindrome (ren, 0, ren.lengde () - 1); } privat boolsk rekursiv palindrom (strengtekst, int fremover, int bakover) {hvis (fremover == bakover) {retur sann; } if ((text.charAt (forward))! = (text.charAt (backward))) {return false; } hvis (fremover <bakover + 1) {retur rekursivPalindrome (tekst, frem + 1, bakover - 1); } returner sant; }

3. Konklusjon

I denne raske opplæringen så vi hvordan vi skulle finne ut om en gitt String er en palindrom eller ikke.

Som alltid er kodeeksemplene for denne artikkelen tilgjengelig på GitHub.


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