Ellenőrizze, hogy a karakterlánc Palindrome-e a Java-ban

1. Bemutatkozás

Ebben a cikkben megnézzük, hogyan ellenőrizhetjük, hogy adott-e Húr egy Java-t használó palindrome.

A palindrome olyan szó, kifejezés, szám vagy más karaktersorozat, amely ugyanolyan hátra olvasható, mint előre, például „asszonyom” vagy „versenyautó”.

2. Megoldások

A következő szakaszokban megvizsgáljuk a különböző módjait annak ellenőrzésére, hogy adott-e Húr palindrom vagy sem.

2.1. Egyszerű megközelítés

Egyszerre elkezdhetjük az adott elem iterálását húr előre és hátra, egy-egy karakter. Ha van egyezés, akkor a hurok folytatódik; ellenkező esetben a hurok kilép:

nyilvános logikai isPalindrome (String text) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); int hossz = tiszta.hossz (); int előre = 0; int hátra = hossz - 1; while (visszafelé> előre) {char forwardChar = clean.charAt (előre ++); char visszafeléChar = tiszta.charAt (visszafelé--); ha (forwardChar! = backwardChar) false értéket ad vissza; } return true; }

2.2. A húr megfordítása

Van néhány különböző megvalósítás, amely megfelel ennek a felhasználási esetnek: felhasználhatjuk az API módszereket StringBuilder és StringBuffer osztályokat, ha palindromokat keresünk, vagy megfordíthatjuk a Húr ezen órák nélkül.

Először vessünk egy pillantást a segéd API-k nélküli kódmegvalósításokra:

nyilvános logikai isPalindromeReverseTheString (String text) {StringBuilder reverse = new StringBuilder (); Karakterlánc tiszta = text.replaceAll ("\ s +", "") .toLowerCase (); char [] sima = tiszta.toCharArray (); for (int i = sima.hossz - 1; i> = 0; i--) {fordított.összead (sima [i]); } return (reverse.toString ()). egyenlő (tiszta); }

A fenti részletben egyszerűen megismételjük az adottat Húr az utolsó karaktertől és csatolja az egyes karaktereket a következő karakterekhez, egészen az első karakterig, ezzel megfordítva az adott karaktert Húr.

Végül teszteljük az adott egyenlőséget Húr és megfordítva Húr.

Ugyanez a viselkedés érhető el API módszerekkel.

Lássunk egy gyors bemutatót:

nyilvános logikai isPalindromeUsingStringBuilder (String text) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); StringBuilder plain = új StringBuilder (tiszta); StringBuilder fordított = sima.reverse (); return (reverse.toString ()). egyenlő (tiszta); } public logikai isPalindromeUsingStringBuffer (String text) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); StringBuffer plain = új StringBuffer (tiszta); StringBuffer fordított = sima.reverse (); return (reverse.toString ()). egyenlő (tiszta); }

A kódrészletben a fordított() módszer a StringBuilder és StringBuffer API az adott megfordításához Húr és tesztelje az egyenlőséget.

2.3. Használata Folyam API

Használhatunk egy IntStream hogy megoldást nyújtson:

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

A fenti részletben ellenőrizzük, hogy a karakter mindkét végén található-e a karakterpárok egyike sem Húr teljesíti a Állítmány feltétel.

2.4. Rekurzió használata

A rekurzió nagyon népszerű módszer az ilyen jellegű problémák megoldására. A bemutatott példában rekurzívan iteráljuk az adottat Húr és tesztelje, hogy kiderüljön, palindrom-e vagy sem:

nyilvános logikai isPalindromeRecursive (String text) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); return recursivePalindrome (tiszta, 0, tiszta.hossz () - 1); } privát logikai rekurzívPalindrome (String text, int forward, int backward) {if (forward == backward) {return true; } if (((text.charAt (előre))! = (text.charAt (vissza))) {return false; } if (előre <hátra + 1) {return recursivePalindrome (szöveg, előre + 1, hátra - 1); } return true; }

3. Következtetés

Ebben a gyors bemutatóban láttuk, hogyan lehet kideríteni, hogy adott-e Húr palindrom vagy sem.

Mint mindig, a cikk kódpéldái is elérhetők a GitHubon.