Sawetara masalah ing program duwe status klasik. Biasane, tugas kasebut ana gandhengane karo matematika lan seneng banget takon karo mahasiswa spesialisasi Ilmu Komputer, uga para pencari kerja nalika wawancara. Dheweke apik amarga mbantu nyiyapake pamikiran sampeyan kanthi cara programmer kanthi apik, uga nglatih. Salah sawijining masalah yaiku mriksa manawa senar minangka palindrom, lan kita bakal nimbang ing artikel iki.
Apa palindrome lan ngapa bisa nggoleki
Palindrom minangka nomer, kombinasi huruf, tembung utawa teks sing maca padha ing loro arah. Kanggo ngringkes, palindrom bisa diarani sembarang set karakter sing simetris ing tengah. Tembung kasebut asale saka basa Yunani sing asale saka tembung "mlaku bali" (palin yaiku "maneh, bali," lan dromos, "mlaku". Palindrome ing basa Jawa tegese padha karo ing umum. Tuladha palindrom:- 1881
- aaqquqqaa
- pop
- awan
- tingkat
- Rotator
- Gymku
- Bu aku Adam
- Saiki, Pak, perang wis menang!
Tuladha kode algoritma Palindrome
Ayo dipikir. String minangka urutan karakter, bisa uga diarani, array char. Iku bakal paling logis kanggo tindakake urutan iki saka loro-lorone menyang tengah lan mbandhingaké karakter nemen. Yen nganti tekan tengah kabeh karakter kita bakal cocog, banjur kita duwe palindrome. Ayo nggawe metode boolean validPalindrome(String s) kanggo mriksa yen String iku palindrome. Kode Jawa kene:
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);
}
}
Ing cara utama, kita mriksa strings palindromic "tingkat", "kelangan", "Madam" lan "Saiki, Pak, perang wis menang!". Nalika sampeyan bisa ndeleng, pisanan, katelu lan papat iku palindromes, nanging liya ora. Apa program bakal menehi?
iku level palindrome? bener iku palindrome? palsu apa Madam palindrome? palsu Saiki, Pak, perang wis menang! palindrome? palsu
Dadi, sing pisanan yaiku palindrome, sing nomer loro ora. Nanging, apa sing salah karo nomer telu lan kaping papat? Kok hasile palsu ? Sampeyan mbokmenawa wis guessed sing titik iku sawetara karakter ing senar iki huruf gedhe lan sawetara huruf cilik, lan kanggo Jawa M lan m loro karakter beda. Ayo nambah program kanggo njupuk prabédan iki. Punika program kanggo mriksa yen senar iku palindrome sing solves masalah gedhe lan cilik.
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);
}
}
Wektu iki asile luwih bisa diprediksi kanggo kita:
iku level palindrome? bener iku palindrome? palsu apa Madam palindrome? bener iku Saiki, Pak, perang wis menang! palindrome? palsu
Nah…ora bisa ditebak. Kahanan karo "Madam" saya apik, nanging apa karo palindrome dawa lan seneng "Saiki, Pak, perang wis menang!". Cukup gampang, yen sampeyan ngelingi kabeh spasi lan simbol tandha padha karo aksara Jawa. Dadi kita kudu nambah algoritma maneh kanggo mbenerake pengawasan iki. Ayo mulang program kita kanggo nglirwakake spasi lan tanda baca. Cukup, kita nglirwakake kabeh karakter non-alfanumerik. Iki minangka program palindrom sing luwih apik ing 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);
}
}
Paling ora asil sing dikarepake saka iku:
iku level palindrome? bener iku palindrome? palsu apa Madam palindrome? bener iku Saiki, Pak, perang wis menang! palindrome? bener
Mbok, yen sampeyan lagi miwiti kanggo program, iku angel kanggo ngerti carane traversal string lan algoritma comparison bisa. Mesthi, iku luwih apik kanggo menehi hasil karo iki, nanging sampeyan bisa nulis versi simplified saka banget wacana liwat Uploaded karakter, kang nyatane senar. Sampeyan bisa nggunakake cara StringBuffer.reverse kanggo mriksa yen senar iku palindrome. Ayo nggawe versi paling gampang tanpa mriksa simbol non-alfanumerik lan huruf gedhe lan cilik.
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);
}
}
Asil padha kaya ing conto pisanan
iku level palindrome? bener iku palindrome? palsu apa Madam palindrome? palsu Saiki, Pak, perang wis menang! palindrome? palsu
Yen sampeyan pengin, sampeyan bisa nambah program iki kayata kita nindakake karo conto pisanan. Kanggo nguatake apa sing sampeyan sinau, disaranake sampeyan nonton video pelajaran saka Kursus Jawa
GO TO FULL VERSION