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.