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.