Periksa apakah String adalah Palindrome di Java

1. Perkenalan

Pada artikel ini, kita akan melihat bagaimana kita dapat memeriksa apakah String yang diberikan adalah palindrome menggunakan Java.

Palindrome adalah kata, frasa, angka, atau urutan karakter lainnya yang dibaca sama mundur seperti maju , seperti "madam" atau "mobil balap".

2. Solusi

Pada bagian berikut, kita akan melihat berbagai cara untuk memeriksa apakah String yang diberikan adalah palindrome atau bukan.

2.1. Pendekatan Sederhana

Kita dapat secara bersamaan memulai iterasi string yang diberikan maju dan mundur, satu karakter pada satu waktu. Jika ada kecocokan loop berlanjut; jika tidak, loop keluar:

public boolean isPalindrome(String text) { String clean = text.replaceAll("\\s+", "").toLowerCase(); int length = clean.length(); int forward = 0; int backward = length - 1; while (backward > forward) { char forwardChar = clean.charAt(forward++); char backwardChar = clean.charAt(backward--); if (forwardChar != backwardChar) return false; } return true; }

2.2. Membalikkan String

Ada beberapa implementasi yang berbeda yang sesuai dengan kasus penggunaan ini: kita dapat menggunakan metode API dari StringBuilder dan StringBuffer kelas ketika memeriksa palindrom, atau kita dapat membalikkan String tanpa kelas-kelas ini.

Mari kita lihat implementasi kode tanpa API pembantu terlebih dahulu:

public boolean isPalindromeReverseTheString(String text) { StringBuilder reverse = new StringBuilder(); String 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); }

Dalam potongan di atas, kita hanya mengulang String yang diberikan dari karakter terakhir dan menambahkan setiap karakter ke karakter berikutnya, sampai ke karakter pertama sehingga membalik String yang diberikan .

Akhirnya, kami menguji kesetaraan antara String yang diberikan dan String terbalik .

Perilaku yang sama dapat dicapai dengan menggunakan metode API.

Mari kita lihat demonstrasi singkatnya:

public boolean isPalindromeUsingStringBuilder(String text) { String clean = text.replaceAll("\\s+", "").toLowerCase(); StringBuilder plain = new StringBuilder(clean); StringBuilder reverse = plain.reverse(); return (reverse.toString()).equals(clean); } public boolean isPalindromeUsingStringBuffer(String text) { String clean = text.replaceAll("\\s+", "").toLowerCase(); StringBuffer plain = new StringBuffer(clean); StringBuffer reverse = plain.reverse(); return (reverse.toString()).equals(clean); }

Dalam potongan kode, kami memanggil metode reverse () dari StringBuilder dan StringBuffer API untuk membalikkan String yang diberikan dan menguji kesetaraan.

2.3. Menggunakan Stream API

Kami juga dapat menggunakan IntStream untuk memberikan solusi:

public boolean 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)); }

Dalam potongan di atas, kami memverifikasi bahwa tidak ada pasangan karakter dari setiap ujung String yang memenuhi kondisi Predikat .

2.4. Menggunakan Rekursi

Rekursi adalah metode yang sangat populer untuk menyelesaikan masalah semacam ini. Dalam contoh yang ditunjukkan, kami secara rekursif mengulangi String yang diberikan dan menguji untuk mengetahui apakah itu palindrom atau bukan:

public boolean isPalindromeRecursive(String text){ String clean = 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(forward)) != (text.charAt(backward))) { return false; } if (forward < backward + 1) { return recursivePalindrome(text, forward + 1, backward - 1); } return true; }

3. Kesimpulan

Dalam tutorial singkat ini, kami melihat cara mengetahui apakah String yang diberikan adalah palindrome atau bukan.

Seperti biasa, contoh kode untuk artikel ini tersedia di GitHub.