Yıllar geçtikçe, bir dizgenin palindrom olup olmadığını kontrol etmek klasik bir kodlama mülakat sorusu haline geldi. Bunun nedeni, dize manipülasyonu ve karşılaştırması ile ilgili kavramları ve hatta uygulamaya bağlı olarak döngüleri içermesidir. Ve soru uzun değil, bu yüzden bir röportajın zaman kısıtlamaları içinde tamamlanabilir. Bu makale, Java ve python'da bir dizenin palindrom olup olmadığını kontrol etmek için uygulamayı içerir.
Palindrom Nedir?
Eşanlamlı.com'a göre, palindromun tanımı "ileriye doğru aynı şekilde okuyan bir kelime veya cümle" dir. Temel olarak, eğer kelimeyi veya cümleyi tersten yazarsanız, ilerideki ile tamamen aynı olacağı anlamına gelir. Örneğin, baba ve anne palindromdur ve baba ve anne değildir. "Palindrom" kelimesi, tekrar anlamına gelen "palin" ve yol veya yön anlamına gelen "dromos" olmak üzere iki Yunanca kök kelimeden gelir. 17. yüzyılda İngiliz oyun yazarı Ben Jonson tarafından icat edildi.
Çözüm
- Soruyu çözmenin en yaygın ve kolay yolu, önce diziyi ters çevirerek, ardından orijinal diziyle karşılaştırmaktır. Bu yaklaşım, büyük-O notasyonunda O(n) olacaktır, çünkü string ters O(n).
- Başka bir yol, karakterleri baştan sona karşılaştırmaya başlamak ve ortaya ulaşana kadar devam etmektir. Bu yaklaşımın zaman karmaşıklığı O(n/2)'dir, ancak büyük-O notasyonunda yine de O(n) olacaktır. Ancak bu yaklaşımın avantajı, ilk uyumsuzlukla karşılaştığınız anda False döndürebilmenizdir, oysa ilk yaklaşımda, bir dizeyi tersine çevirmek ilk adım olduğundan, zaman karmaşıklığı her zaman O(n) olacaktır.
Python Uygulamasında Palindrom
Python'da bir dizgenin palindrom olup olmadığını kontrol etmek için kod aşağıdadır.
def is_palindrome(s): """Eğer s bir palindrom argümanı verilmişse True döndürür, yoksa False""" assert(isinstance(s,str)), "Argüman s türde değil " # Verilen argümanın tipindeyse onayla return s[::-1]==s # __name__=="__main__": print(is_palindrome("dad")) ise dizenin tersini kendisiyle karşılaştırın
def is_palindrome(word): """Karakterleri baştan sona tek tek karşılaştırır ve ilk uyumsuzluk oluştuğunda False döndürür veya aksi takdirde True döndürür""" i1,i2 = 0,len(word)-1 # Initialize imleçler while i2>i1: if word[i1]!=word[i2]: # Karakterler eşleşmiyorsa daha fazla ilerlemeye gerek yok False i1+=1 i2-=1 döndürür True if __name__=="__main__ ": print(is_palindrome("baba"))
Java Uygulamasında Palindrom
Java'da bir dizgenin palindrom olup olmadığını kontrol etmek için kod aşağıdadır.
public class Palindrome { public static Boolean isPalindrome(String str){ StringBuilder sb = new StringBuilder(str); // StringBuilder'ın geri dönüş yöntemi var sb.reverse().toString().equals(str); // Dizenin tersini kendisiyle karşılaştırın } public static void main(String args[]) { Boolean b = isPalindrome("dad"); System.out.println(b); } }
public class Palindrome { public static Boolean isPalindrome(String str){ int i1 = 0; int i2 = str.uzunluk() - 1; while(i2>i1){ if(str.charAt(i1)!=str.charAt(i2)){ false döndür; } i1++; i2--; } true döndür; } public static void main(String args[]) { Boolean b = isPalindrome("dad"); System.out.println(b); } }