13 November 2011

Membuat Palindrome Checker dengan Java

Pembaca yang budiman, baru ada kesempatan lagi untuk menulis buat blog ini. Mohon maaf sebelumnya jika begitu lama tenggang artikel-artikel baru bisa saya tuliskan.
Sebelum kita mulai saya ingin sedikit berbagi kebahagiaan dengan pembaca semua. Alhamdullilah, anak kedua saya lahir pada tanggal 12 November 2011 pada pukul 4:10 pagi, laki-laki, beratnya 3.5 Kg dan panjangnya 49CM. Putra kami ini kami beri nama Erlangga Fahrizal Yusuf Putra. Mudah-mudahan ia bisa menjadi anak yang soleh dan berbakti terhadap orang tua, negara, bangsa dan agamanya, amin. :)
Baiklah mari kita lanjutkan tujuan tulisan dalam artikel ini. Menurut wikipedia "A palindrome is a word, phrase, number, or other sequence of units that can be read the same way in either direction, with general allowances for adjustments to punctuation and word dividers." Yang jika dibahasa indonesiakan berarti "Palindrome adalah kata-kata, frase, angka, atau urutan dari sebuah unit yang dapat dibaca dengan hasil yang sama dari sudut pandang yang berbeda dengan tunjangan umum untuk penyesuaian pemisah tanda baca dan kata". Maksudnya jika kita memiliki sebuah kata "katak" nah jika kita baca secara terbalik maka tulisan tersebut juga terbaca "katak" juga.
Hmm, ada beberapa konsep yang mungkin bisa kita terapkan untuk membuat algoritma dalam mencari penyelesaian kasus ini:
  1. Kita bisa mengeceknya dengan langsung menggunakan fungsi reverse yang mungkin ada dalam java.
  2. Kita bisa me-compare masing-masing karakter dengan urutan algoritma sebagai berikut. Misal ada satu kata terdiri dari 5 huruf, maka compare yag terjadi adalah huruf pertama di compare dengan huruf ke-5, kemudian huruf ke-2 di-compare dengan huruf ke 4, dan seterusnya.
Sekarang coba kita lihat source berikut ini:

  1. public static boolean isPalindrome(String sWordToCheck) {
  2. return sWordToCheck.equals(new StringBuffer(sWordToCheck).reverse().toString());
  3. }

Mari kita lihat source code tsb. Source ini adalah sebuah fungsi yang memiliki kembalian (return) berupa Boolean yang didalam fungsi tersebut hanya mengecek sebuah string yang menjadi parameter fungsi ini. Algoritma pengecekan dilakukan dengan cara merubah string parameter menjadi type StringBuffer sehingga StringBuffer tersebut bisa di terapkan fungsi reverse yang memang ada pada class StringBuffer secara default. 
Dalam pemakaiannya kita bisa membuat program dalam java seperti contoh berikut ini:

  1. public class PalindromeChecker {
  2. public static void main(String[] args) {
  3. String sWordToCheck = "malam";

  4. if(isPalindrome(sWordToCheck))
  5. System.out.println(sWordToCheck + " Is Palindrome ");
  6. else
  7. System.out.println(sWordToCheck + " Is Not Palindrome ");
  8. }

  9. public static boolean isPalindrome(String sWordToCheck) {
  10. return sWordToCheck.equals(new StringBuffer(sWordToCheck).reverse().toString());
  11. }
  12. }

Program diatas mengecek kata "malam" menggunakan fungsi "isPalindrome" yang memiliki parameter String "sWordToCheck". Silahkan dicoba :).


Untuk algoritma yang kedua mari kita lihat source code dibawah ini:

  1. public static boolean isPalindrome(String word) {
  2. int left = 0; // index of leftmost unchecked char
  3. int right = word.length() - 1; // index of the rightmost

  4. while (left < right) { // continue until they reach center
  5. if (word.charAt(left) != word.charAt(right)) {
  6. return false; // if chars are different, finished
  7. }
  8. left++; // move left index toward the center
  9. right--; // move right index toward the center
  10. }

  11. return true; // if finished, all chars were same
  12. }

Mari kita perhatikan source code diatas, source code diatas adalah sebuah fungsi yang mengembalikan (return) true atau false dari sebuah inputan String parameter word. Algoritma yang dilakukan adalah sebagai berikut: 
  • Kata yang menjadi parameter diberikan indeks dari depan dan dari belakang.
  1. int left = 0; // index of leftmost unchecked char
  2. int right = word.length() - 1; // index of the rightmost

  • Kemudian dibuat perulangan jika left masih lebih kecil dari pada right.
  1. while (left < right) { // continue until they reach center
  2. ..........
  3. ..........
  4. }
  • Didalamnya diperiksa apakah karakter 1 sama tidak sama dengan karakter terakhir, jika memang pemeriksaan pertama sudah tidak sama maka tidak perlu dilanjutkan ke pemeriksaan selanjutnya(return false).

  1. while (left < right) { // continue until they reach center
  2. if (word.charAt(left) != word.charAt(right)) {
  3. return false; // if chars are different, finished
  4. }
  5. ....... // move left index toward the center
  6. ....... // move right index toward the center
  7. }
  • Jika ternyata karakter sama maka kemudian masing-masing pointer(left dan right) dilakukan increment dan decrement. Dan jika semuanya sudah selesai maka bisa disimpulkan bahwa kata tersebut adalah palindrome (return true).

  1. while (left < right) { // continue until they reach center
  2. ..........
  3. }
  4. left++; // move left index toward the center
  5. right--; // move right index toward the center
  6. }

  7. return true; // if finished, all chars were same

Dalam sebuah program kecil java, kita bisa membuatnya seperti contoh berikut ini:
  1. public class PalindromeChecker {
  2. public static void main(String[] args) {
  3. String sWordToCheck = "malam";

  4. if(isPalindrome(sWordToCheck))
  5. System.out.println(sWordToCheck + " Is Palindrome ");
  6. else
  7. System.out.println(sWordToCheck + " Is Not Palindrome ");
  8. }

  9. public static boolean isPalindrome(String word) {
  10. int left = 0; // index of leftmost unchecked char
  11. int right = word.length() - 1; // index of the rightmost

  12. while (left < right) { // continue until they reach center
  13. if (word.charAt(left) != word.charAt(right)) {
  14. return false; // if chars are different, finished
  15. }
  16. left++; // move left index toward the center
  17. right--; // move right index toward the center
  18. }

  19. return true; // if finished, all chars were same
  20. }
  21. }

Silahkan dicoba :)

Demikianlah percobaan kita kali ini. Kali ini memang saya mengambil source dari luar dan tidak membuatnya sendiri, dengan harapan ada pesan moral yang tersampaikan yaitu "Maksimalkanlah Google sebagai mesin pencari, kalo memang sudah ada, kenapa harus buat, hanya masalahnya adalah source yang kita ambil harus benar-benar kita pahami algoritma dan flow yang ada".

Terima kasih dan semoga bermanfaat.


Menteng, 14 November 2011

Josescalia

No comments: