Python'da Palindrom Numarası Nasıl Kontrol Edilir?
Yayınlanan: 2020-11-30İçindekiler
Palindrom nedir?
Palindrom, ileriye doğru okuduğu gibi geriye doğru da okuyan bir kelime, sayı veya herhangi bir karakter dizisidir.
Birkaç örnek: detartrated, 1567651, 02/02/2020, Malayalam
Bu makale, Python kullanarak verilen bir girdinin palindrom olup olmadığını kontrol etmek için bir program yazmanın çeşitli yollarını gösterir.
Yöntem 1:
Akla gelen en naif çözüm, sayıyı tersine çevirip giriş sayısına eşit olup olmadığını kontrol etmektir. Aşağıdaki gibi yapılabilir:
sayı = int(girdi());
ters = 0
sayı > 0 iken:
rakam = sayı % 10
ters = ters * 10 + basamak
sayı = sayı // 10
eğer sayı==ters:
print(“bu bir palindromdur!”)
Başka:
print(“Bu bir palindrom değil!”)
Ancak bu, kodun okunabilirliğini tehlikeye atar ve gerekenden daha fazla kod satırı içerir. Daha fazla bilgi edinmek için çevrimiçi veri bilimi kursumuza göz atın.
İşte sadece bir satır kullanarak bir numarayı kontrol etmenin kısa ve tatlı bir yolu.
Yöntem 2:
İşin püf noktası, giriş numarasını int yerine str veri türü olarak almaktır. Ardından, bir dizenin tersini elde etmek ve if ifadesinin kendisinde eşitliği kontrol etmek için [::-1] dilimleme tekniğini kullanabilirsiniz .
sayı = girdi()
eğer sayı == sayı[::-1]:
print(“bu bir palindromdur!”)
Başka:
print(“Bu bir palindrom değil!”)
Yöntem 3:
Bu, bir dizinin palindrom olup olmadığını kontrol etmek için özyinelemeli bir yöntemdir.
def isPalindrome(sayılar, başlangıç, bitiş):
başlangıç >= bitiş ise :
dönüş True
if sayılar[başlangıç] == sayılar[son]:
dönüş isPalindrome(sayılar, başlangıç + 1, bitiş – 1)
Başka:
dönüş Yanlış
sayılar= liste(harita(int, girdi().split()))
n=len(sayılar)
isPalindrome(sayılar, 0, n-1):
print(“bu bir palindromdur!”)
Başka:
print(“Bu bir palindrom değil!”)
isPalindrome işlevi, ilk ve son dizi öğelerinin aynı olup olmadığını kontrol eder . Değilse, işlev hemen False döndürür. Aksi takdirde, iki işaretçi ortada buluşana kadar bir sonraki aşırı öğeleri tekrar tekrar kontrol eder.
Okuyun: Python Proje Fikirleri ve Konuları
Palindromlarla ilgili ortak kodlama görüşme soruları
#1 En uzun palindromik Alt Dizi
Girdi olarak yalnızca bir dize verildiğinde, dizedeki en uzun palindromik alt dizenin uzunluğunu döndürmeniz gerekir.
Örneğin:
Girdi: 'acbcbabcc'
Çıktı: 5 ('cbabc')
Yaklaşmak:
Bunu DP'nin en yaygın sorunlarından biri olan en uzun ortak alt dize ile ilişkilendirmeye çalışırsak , buradaki fark, bize yalnızca bir giriş dizesi verilirken LCS'nin iki dize kullanmasıdır. Bir palindromun tam tersine eşit olduğunu bildiğimiz için, ikinci dizgiyi verilen girdimizin tersi olarak yapabiliriz.
Şimdi bu, LCS'yi bulmakla tamamen aynı hale geliyor.
def LCSubstr(A, B, m, n):
LCSub = [[0 for i in range(n+1)] için j in range(m+1)]
an = 0
i aralığında (m+1):
(n+1) aralığındaki j için :
if (i == 0 veya j == 0):
LCSub[i][j] = 0
elif A[i-1] == B[j-1]:

LCSub[i][j] = 1 + LCSub[i-1][j-1]
ans = max(ans, LCSub[i][j])
Başka:
LCSub[i][j] = 0
dönüş ans
str1 = girdi()
str2 = str1[::-1]
m = uzun(str1)
n = uzun (str2)
print('En uzun palindromik alt dizginin uzunluğu = ', LCSubstring(str1, str2, m, n))
Yani yukarıdaki girdi için iki diziyi şu şekilde elde ederiz:
'acbcbabcc' ve
'ccbabcbca'
En uzun ortak alt dizi , 5 uzunluğunda olan 'cbabc' olur.
#2 Bir Dizinin Anagramının Palindrom olup olmadığını kontrol edin
Girdi olarak bir dize verildiğinde, dizenin herhangi bir anagramının palindrom olup olmadığını kontrol etmeli ve buna göre evet/hayır döndürmelisiniz.
Örneğin:
Girdi: 'pythonpython'
Çıkış: Evet
(Dizenin kendisi bir palindrom olmasa da, olası bir 'pythonnohtyp' anagramı bir palindrom oluşturur)
Girdi: 'harrypotter'
Çıkış: Hayır
Yaklaşmak:
Dikkatli bir şekilde fark ederseniz, ne zaman eşit uzunlukta bir palindrom dizgemiz olsa, ilk yarıdaki tüm karakterler ikinci yarıda tekrarlanır. Bu, dizede bulunan tüm karakterlerin çift sayıda gerçekleştiği anlamına gelir.
Uzunluk tek olduğunda, orta öğenin solundaki tüm karakterler (dahil değildir), orta öğenin sağ tarafında aynı sayıda bulunur. Bu, tek sayıda (orta eleman) geçen tek bir karakter olduğu ve diğerlerinin çift sayıda gerçekleştiği anlamına gelir.
Bu mantığı kullanarak, dizgedeki karakter sayısını bir hash içinde saklayabilir ve gerekli cevabı almak için bu kısıtlamaları kontrol edebiliriz.
CHAR_RANGE = 256
str1 = girdi()
freq = [ aralıktaki i için 0 (CHAR_RANGE)]
str1'deki i için :
freq[ord(i)] += 1 #ord(x), x'in unicode değerini verir
sayı_ods = 0
i aralığında (CHAR_RANGE):
freq[i] & 1: ise
sayı_oranlar += 1
eğer (sayı_ods > 1):
yazdır(“Evet”)
Başka:
yazdır(“Hayır”)
Çözüm
Sonuç olarak, palindrom sorunları çok yaygın ve ilginçtir. Çeşitli matematiksel bulmacaları ve rekabetçi programlama sorularını çözmek için kullanışlıdırlar.
Veri bilimi hakkında bilgi edinmek istiyorsanız, IIIT-B & upGrad'ın çalışan profesyoneller için oluşturulmuş ve 10'dan fazla vaka çalışması ve proje, uygulamalı uygulamalı atölye çalışmaları, endüstri uzmanlarıyla mentorluk, 1 Endüstri danışmanlarıyla bire bir, en iyi firmalarla 400+ saat öğrenim ve iş yardımı.
Palindrome programının zaman karmaşıklığı nedir?
Yöntem tarafından gerçekleştirilen temel işlemlerin sayısı, her bir temel işlemin tamamlanması için belirli bir süre aldığı varsayılarak, genellikle zaman karmaşıklığını tahmin etmek için kullanılır. Bir sayının palindrom olup olmadığını belirlemenin zaman karmaşıklığı O(log10 (n))'dir. Değerlerin palindrom olup olmadığını kontrol ettiğimizde, her yinelemede sayıyı veya değeri ona böleriz. Sonuç olarak, zamansal karmaşıklık, bir sayıdaki basamak sayısına eşittir.
Python'daki // operatöründen nasıl / farklıdır?
Bölme operatörünü kullandığımızda, yani Python'da tek bir eğik çizgi (/) kullandığımızda, derleyici eğik çizginin sağ ve sol taraflarındaki iki değeri basitçe böler. Ancak double slash(//), yani kat bölme kullandığımızda, derleyiciden tipik bölme işlemini gerçekleştirmesini isteriz, ancak bunun verdiği sonuç, cevaba yakın olabilecek en büyük tam sayıdır. Bu tam sayı, normal bölmenin sonucundan küçük veya ona eşittir.
Python Geliştiricisinin giriş seviyesi maaşı nedir?
Python'un çoğu endüstride ve şirkette yaygın olarak kullanıldığı ve Python'u ikinci en yüksek ücretli bilgi işlem dili haline getirdiği bilinen bir gerçektir. Python ayrıca öğrenmesi kolay ve oldukça esnek olduğu için öğrenciler ve profesyoneller arasında en sevilen programlama dilidir. Hindistan'daki bir Python Geliştiricisinin giriş seviyesi maaşı, yılda ortalama 4,27,293 INR civarındadır. Python, Veri Bilimi ve Makine Öğrenimi gibi diğer alanlarda da kullanıldığı için Python öğrenen profesyonellerin çok fazla kapsamı vardır.