Skontrolujte, či je reťazec v jazyku Java Palindróm

1. Úvod

V tomto článku sa pozrieme na to, ako môžeme skontrolovať, či je daný String je palindróm využívajúci Javu.

Palindróm je slovo, fráza, číslo alebo iná postupnosť znakov, ktoré sa čítajú dozadu a dopredu, napríklad „madam“ alebo „závodné auto“.

2. Riešenia

V nasledujúcich častiach sa pozrieme na rôzne spôsoby kontroly, či sú dané String je palindróm alebo nie.

2.1. Jednoduchý prístup

Môžeme súčasne začať iterovať dané povrázok dopredu a dozadu, po jednom znaku. Ak existuje zhoda, slučka pokračuje; inak smyčka končí:

public boolean isPalindrome (String text) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); int dĺžka = clean.length (); int dopredu = 0; int dozadu = dĺžka - 1; while (vzad> vpred) {char forwardChar = clean.charAt (vpred ++); char backwardChar = clean.charAt (dozadu--); if (forwardChar! = backwardChar) return false; } návrat pravdivý; }

2.2. Obrátenie reťazca

Existuje niekoľko rôznych implementácií, ktoré vyhovujú tomuto prípadu použitia: môžeme využiť metódy API z StringBuilder a StringBuffer triedy pri kontrole palindrómov, alebo môžeme obrátiť String bez týchto tried.

Poďme sa najskôr pozrieť na implementácie kódu bez pomocných rozhraní API:

public boolean isPalindromeReverseTheString (String text) {StringBuilder reverse = new StringBuilder (); Reťazec clean = text.replaceAll ("\ s +", "") .toLowerCase (); char [] plain = clean.toCharArray (); for (int i = plain.length - 1; i> = 0; i--) {reverse.append (plain [i]); } return (reverse.toString ()). equals (clean); }

Vo vyššie uvedenom úryvku zadaný text jednoducho opakujeme String od posledného znaku a pripojte každý znak k nasledujúcemu znaku, až po prvý znak, čím sa obráti daný znak String.

Na záver otestujeme rovnosť medzi daným String a obrátene String.

Rovnaké správanie je možné dosiahnuť pomocou metód API.

Pozrime sa na krátku ukážku:

public boolean isPalindromeUsingStringBuilder (text reťazca) {reťazec čistý = text.replaceAll ("\ s +", "") .toLowerCase (); StringBuilder plain = nový StringBuilder (čistý); StringBuilder reverse = plain.reverse (); return (reverse.toString ()). equals (clean); } public boolean isPalindromeUsingStringBuffer (text reťazca) {reťazec čistý = text.replaceAll ("\ s +", "") .toLowerCase (); StringBuffer obyčajný = nový StringBuffer (čistý); StringBuffer reverse = plain.reverse (); return (reverse.toString ()). equals (clean); }

V útržku kódu vyvoláme znak reverz () metóda z StringBuilder a StringBuffer API na obrátenie daného String a skúška rovnosti.

2.3. Použitím Prúd API

Môžeme tiež použiť IntStream poskytnúť riešenie:

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

V úryvku vyššie overíme, že žiadny z dvojice znakov z každého konca znaku String spĺňa Predikát stav.

2.4. Pomocou rekurzie

Rekurzia je veľmi populárna metóda na riešenie týchto problémov. V demonštrovanom príklade danú rekurzívne iterujeme String a otestujte, či je to palindróm alebo nie:

public boolean isPalindromeRecursive (text reťazca) {reťazec čistý = text.replaceAll ("\ s +", "") .toLowerCase (); return recursivePalindrome (clean, 0, clean.length () - 1); } private boolean recursivePalindrome (String text, int forward, int backward) {if (forward == backward) {return true; } if ((text.charAt (dopredu))! = (text.charAt (dozadu))) {return false; } if (forward <backward + 1) {return recursivePalindrome (text, forward + 1, backward - 1); } návrat pravdivý; }

3. Záver

V tomto rýchlom návode sme videli, ako zistiť, či je daný String je palindróm alebo nie.

Príklady kódov pre tento článok sú ako vždy dostupné na GitHub.


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