CodeGym /Java Blog /Acak /Program Java untuk memeriksa String adalah Palindrom
John Squirrels
Level 41
San Francisco

Program Java untuk memeriksa String adalah Palindrom

Dipublikasikan di grup Acak
Beberapa masalah dalam pemrograman berstatus klasik. Biasanya, tugas semacam itu terkait dengan matematika dan mereka sangat suka bertanya kepada siswa spesialisasi Ilmu Komputer, serta pencari kerja saat wawancara. Mereka bagus karena membantu mengatur pemikiran Anda dengan cara programmer dengan cukup baik, serta melatihnya. Salah satu masalah tersebut adalah memeriksa apakah suatu string adalah palindrom, dan kami akan mempertimbangkannya di artikel ini.

Apa itu palindrom dan mengapa bisa mencarinya

Palindrom adalah angka, kombinasi huruf, kata atau teks yang dibaca sama di kedua arah. Singkatnya, palindrom dapat disebut kumpulan karakter apa pun yang simetris di tengahnya. Kata ini berasal dari akar bahasa Yunani yang secara harfiah berasal dari “berlari kembali” (palin adalah “lagi, kembali,” dan dromos, “berlari.”). Palindrom dalam bahasa Jawa artinya sama dengan arti pada umumnya. Contoh palindrom:
  • 1881
  • aaqquqqaa
  • pop
  • Siang
  • tingkat
  • Alat pemutar
  • Gim saya
  • Bu, saya Adam
  • Sekarang, Pak, perang telah dimenangkan!
1881 adalah angka palindrom dan yang lainnya adalah string palindrom. Pada artikel ini, kita akan melihat palindrom yang direpresentasikan sebagai string, tetapi beberapa algoritme cukup dapat diterapkan pada jenis palindrom lain di Jawa. Mengapa Anda ingin mencari palindrom? Nyatanya, kita tidak sering harus mencari palindrom dalam kehidupan sehari-hari. Ini semacam tugas yang sangat spesifik. Jika kita mengingat algoritma string, lebih sering dalam praktiknya, programmer dapat menemukan mencari substring dalam string, dan tidak mencari palindrom atau nomornya. Namun, masalah yang berkaitan dengan palindrom memiliki aplikasi penting. Yang pertama adalah program olimpiade. Mungkin ada tugas untuk mengidentifikasi palindrom. Aplikasi kedua yang relevan untuk programmer pemula adalah wawancara. Pada wawancara teknis, Anda mungkin diminta untuk menulis program dengan cepat untuk memeriksa apakah suatu string adalah palindrom, bahkan mungkin di selembar kertas. Nah, dalam sains, aplikasi paling praktis untuk menemukan palindrom adalah algoritma biologis. Menurut Wikipedia, palindromisitas senyawa biologis memainkan peran penting dalam sifat berbagai senyawa biologis.

Contoh kode algoritma palindrom

Mari berpikir. String adalah urutan karakter, bisa dikatakan, array karakter. Akan sangat logis untuk mengikuti urutan ini dari kedua sisi ke tengah dan membandingkan karakter ekstrim. Jika sampai kita mencapai tengah semua karakter kita cocok, maka kita memiliki palindrom. Mari buat metode boolean validPalindrome(String s) untuk memeriksa apakah String adalah palindrom. Kode Java ada di sini:

public class PalindromeTest1 {

//method to check if a string is palindrome    
public static boolean validPalindrome(String s) {
       for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
           if (s.charAt(i) != s.charAt(j)) {
               return false;
           }
       }
       return true;
   }

   public static void main(String[] args) {
       String s1 = "level";
       String s2 = "cool";
       String s3 = "Madam";
       String s4 = "Now, sir, a war is won!"
       boolean b1 = validPalindrome(s1);
       boolean b2 = validPalindrome(s2);
       boolean b3 = validPalindrome(s3);
       boolean b4 = validPalindrome(s4);
       System.out.println("is " + s1 + " a palindrome? " + b1);
       System.out.println("is " + s2 + " a palindrome? " + b2);
       System.out.println("is " + s3 + " a palindrome? " + b3);
       System.out.println("is " + s4 + " a palindrome? " + b4);


   }

}
Dalam metode utama, kami memeriksa string palindromik "level", "keren", "Nyonya" dan "Sekarang, Tuan, perang telah dimenangkan!". Seperti yang Anda lihat, yang pertama, ketiga dan keempat adalah palindrom, tetapi yang kedua bukan. Apa yang akan diberikan program?
apakah level merupakan palindrom? benar itu keren palindrom? salah apakah Nyonya palindrom? salah adalah Sekarang, Pak, perang dimenangkan! palindrom? PALSU
Jadi, yang pertama adalah palindrom, yang kedua bukan. Namun, apa yang salah dengan yang ketiga dan keempat? Mengapa hasilnya salah ? Anda mungkin sudah menebak bahwa intinya adalah beberapa karakter dalam string ini adalah huruf besar dan beberapa huruf kecil, dan untuk Java M dan m adalah dua karakter yang berbeda. Mari tingkatkan program untuk mempertimbangkan perbedaan ini. Berikut adalah program untuk memeriksa apakah suatu string adalah palindrom yang memecahkan masalah huruf besar dan kecil.

public class PalindromeTest2 {

   //lowercase and uppercase characters should be treated the same:
   public static boolean validPalindrome(String s) {
       for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
           if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j)))
               return false;
       }
       return true;
   }

   public static void main(String[] args) {
       String s1 = "level";
       String s2 = "cool";
       String s3 = "Madam";
        String s4 = "Now, sir, a war is won!"
       boolean b1 = validPalindrome(s1);
       boolean b2 = validPalindrome(s2);
       boolean b3 = validPalindrome(s3);
       boolean b4 = validPalindrome(s4);
       System.out.println("is " + s1 + " a palindrome? " + b1);
       System.out.println("is " + s2 + " a palindrome? " + b2);
       System.out.println("is " + s3 + " a palindrome? " + b3);
       System.out.println("is " + s4 + " a palindrome? " + b4);


   }

}
Kali ini hasilnya lebih dapat diprediksi untuk kami:
apakah level merupakan palindrom? benar itu keren palindrom? salah apakah Nyonya palindrom? benar Sekarang, Pak, perang dimenangkan! palindrom? PALSU
Yah… tidak bisa diprediksi. Situasi dengan "Nyonya" menjadi lebih baik, tetapi bagaimana dengan palindrom panjang dan bahagia kami "Sekarang, Tuan, perang telah dimenangkan!". Caranya cukup mudah, mengingat semua spasi dan simbol tanda baca sama dengan huruf untuk bahasa Jawa. Jadi kami perlu meningkatkan algoritme kami lagi untuk memperbaiki kesalahan ini. Mari ajarkan program kita untuk mengabaikan spasi dan tanda baca. Sederhananya, kami mengabaikan semua karakter non-alfanumerik. Berikut adalah program palindrom yang ditingkatkan di Jawa.

public class PalindromeTest3 {

   //in addition to the above, ignore all non alphanumeric chars like punctuation and spaces
   private static boolean isAlphanumeric(char c) {
       return Character.isAlphabetic(c) || Character.isDigit(c);
   }

   public static boolean validPalindromeIgnorePunctuation(String s) {
       for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
           // skip chars we should ignore
           while (j >= 0 && !isAlphanumeric(s.charAt(j))) j--;
           while (i < s.length() && !isAlphanumeric(s.charAt(i))) i++;
           // overskipped -> nothing left to validate
           if (i >= j) return true;

           if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j)))
               return false;
       }
       return true;
   }


   public static void main(String[] args) {
       String s1 = "level";
       String s2 = "cool";
       String s3 = "Madam";
       String s4 = "Now, sir, a war is won!";
       boolean b1 = validPalindromeIgnorePunctuation(s1);
       boolean b2 = validPalindromeIgnorePunctuation(s2);
       boolean b3 = validPalindromeIgnorePunctuation(s3);
       boolean b4 = validPalindromeIgnorePunctuation(s4);
       System.out.println("is " + s1 + " a palindrome? " + b1);
       System.out.println("is " + s2 + " a palindrome? " + b2);
       System.out.println("is " + s3 + " a palindrome? " + b3);
       System.out.println("is " + s4 + " a palindrome? " + b4);


   }

}
Setidaknya hasilnya adalah apa yang kami harapkan darinya:
apakah level merupakan palindrom? benar itu keren palindrom? salah apakah Nyonya palindrom? benar Sekarang, Pak, perang dimenangkan! palindrom? BENAR
Mungkin, jika Anda baru mulai memprogram, sulit bagi Anda untuk memahami cara kerja algoritma string traversal dan perbandingan. Tentu saja, lebih baik menangani ini, tetapi Anda dapat menulis versi yang disederhanakan dari bagian itu sendiri melalui rangkaian karakter, yang sebenarnya adalah sebuah string. Anda dapat menggunakan metode StringBuffer.reverse untuk memeriksa apakah suatu string adalah palindrom. Mari kita lakukan versi paling sederhana tanpa memeriksa simbol non-alfanumerik dan huruf besar dan kecil.

public class PalindromeTest5 {

   public static boolean validPalindrome(String s) {

       StringBuffer buffer = new StringBuffer(s);
       buffer.reverse();
       String data = buffer.toString();

       if (s.equals(data)) {
           return true;
       }
       return false;
   }
   public static void main(String[] args) {
       String s1 = "level";
       String s2 = "cool";
       String s3 = "Madam";
       String s4 = "Now, sir, a war is won!";
       boolean b1 = validPalindrome(s1);
       boolean b2 = validPalindrome(s2);
       boolean b3 = validPalindrome(s3);
       boolean b4 = validPalindrome(s4);
       System.out.println("is " + s1 + " a palindrome? " + b1);
       System.out.println("is " + s2 + " a palindrome? " + b2);
       System.out.println("is " + s3 + " a palindrome? " + b3);
       System.out.println("is " + s4 + " a palindrome? " + b4);


   }
}
Hasilnya sama seperti pada contoh pertama
apakah level merupakan palindrom? benar itu keren palindrom? salah apakah Nyonya palindrom? salah adalah Sekarang, Pak, perang dimenangkan! palindrom? PALSU
Jika mau, Anda dapat meningkatkan program ini seperti yang kami lakukan pada contoh pertama. Untuk memperkuat apa yang Anda pelajari, kami sarankan Anda menonton video pelajaran dari Kursus Java kami
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION