Bagaimana Cara Memeriksa Nomor Palindrome dengan Python?

Diterbitkan: 2020-11-30

Daftar isi

Apa itu Palindrom?

Palindrom adalah kata, angka, atau string karakter yang dibaca mundur sama dengan dibaca maju.

Beberapa contoh: detartrated, 1567651, 02/02/2020, Malayalam

Jadi artikel ini menunjukkan kepada Anda berbagai cara Anda dapat menulis program untuk memeriksa apakah input yang diberikan adalah palindrom atau bukan, menggunakan Python.

Metode 1:

Solusi paling naif yang terlintas dalam pikiran adalah membalikkan nomor dan memeriksa apakah itu sama dengan nomor input. Hal ini dapat dilakukan sebagai berikut:

angka = int(masukan());

terbalik = 0

sedangkan angka > 0:

angka = angka % 10

mundur = mundur * 10 + angka

angka = angka // 10

jika nomor == terbalik:

print("Ini adalah palindrom!")

lain:

print("ini bukan palindrom!")

Namun, ini membahayakan keterbacaan kode dan memiliki lebih banyak baris kode daripada yang diperlukan. Lihat kursus ilmu data online kami untuk mempelajari lebih lanjut.

Inilah cara singkat dan manis untuk memeriksa nomor hanya dengan satu baris.

Metode 2:

Triknya adalah dengan mengambil nomor input sebagai tipe data str alih-alih int. Kemudian Anda dapat menggunakan teknik pengirisan [::-1] untuk mendapatkan kebalikan dari string dan memeriksa kesetaraan dalam pernyataan if itu sendiri.

angka = masukan()

jika angka == angka[::-1]:

print("Ini adalah palindrom!")

lain:

print("ini bukan palindrom!")

Metode 3:

Ini adalah metode rekursif untuk memeriksa apakah array adalah palindrom atau tidak.

def isPalindrome(angka, awal, akhir):

jika mulai >= akhir:

kembali Benar

jika angka[mulai] == angka[akhir]:

kembalikan isPalindrome(angka, mulai + 1, akhir – 1)

lain:

kembali Salah

angka= daftar(peta(int, input().split()))

n=len(angka)

jika adalahPalindrome(angka, 0, n-1):

print("Ini adalah palindrom!")

lain:

print("ini bukan palindrom!")

Fungsi isPalindrome memeriksa apakah elemen array pertama dan terakhir sama atau tidak. Jika tidak, fungsi segera mengembalikan False. Jika tidak, secara rekursif memeriksa elemen ekstrem berikutnya hingga kedua pointer bertemu di tengah.

Baca: Ide & Topik Proyek Python

Pertanyaan wawancara pengkodean umum yang terkait dengan palindrom

#1 Substring palindrom terpanjang

Diberikan hanya satu string sebagai input, Anda harus mengembalikan panjang substring palindromik terpanjang dalam string.

Misalnya:

Masukan: 'acbcbabcc'

Keluaran: 5 ('cbabc')

Mendekati:

Jika kita mencoba menghubungkannya dengan salah satu masalah DP yang paling umum, substring umum terpanjang, di sini perbedaannya adalah bahwa kita hanya diberikan satu string input sedangkan LCS menggunakan dua string. Karena kita tahu palindrom sama persis dengan kebalikannya, kita dapat menjadikan string kedua sebagai kebalikan dari input yang diberikan.

Sekarang ini menjadi persis sama dengan menemukan LCS.

def LCSubstr(A, B, m, n):

LCSub = [[0 untuk i dalam rentang(n+1)] untuk j dalam rentang(m+1)]

jawaban = 0

untuk i dalam rentang (m+1):

untuk j dalam rentang (n+1):

jika (i == 0 atau 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])

lain:

LCSub[i][j] = 0

kembali dan

str1 = masukan()

str2 = str1[::-1]

m = len(str1)

n = len(str2)

print('Panjang substring palindromik terpanjang = ', LCSubstring(str1, str2, m, n))

Jadi untuk input di atas, kami memperoleh dua string sebagai

'acbcbabcc' dan

'ccbabcbca'

Substring umum terpanjang menjadi 'cbabc' yang panjangnya 5.

#2 Periksa apakah Anagram dari String adalah Palindrome

Diberikan string sebagai input, Anda harus memeriksa apakah anagram string dapat berupa palindrom atau tidak dan mengembalikan ya/tidak sesuai.

Misalnya:

Masukan: 'pythonpython'

Keluaran: Ya

(sementara string itu sendiri bukan palindrom, kemungkinan anagram 'pythonnohtyp' memang membentuk palindrom)

Masukan: 'harrypotter'

Keluaran: Tidak

Mendekati:

Jika Anda perhatikan dengan cermat, setiap kali kita memiliki string palindrom dengan panjang yang genap, semua karakter di babak pertama diulang di babak kedua. Ini berarti semua karakter yang ada dalam string muncul beberapa kali.

Jika panjangnya ganjil, semua karakter di sebelah kiri elemen tengah (tidak termasuk) muncul dengan frekuensi yang sama di sisi kanan elemen tengah. Ini berarti hanya ada satu karakter yang muncul dengan jumlah ganjil (elemen tengah) dan semua karakter lainnya muncul beberapa kali genap.

Dengan menggunakan logika ini, kita dapat menyimpan jumlah karakter dalam string dalam hash dan memeriksa batasan ini untuk mendapatkan jawaban yang diperlukan.

CHAR_RANGE = 256

str1 = masukan()

freq = [0 untuk i dalam rentang(CHAR_RANGE)]

untuk saya di str1:

freq[ord(i)] += 1 #ord(x) memberikan nilai unicode dari x

jumlah_peluang = 0

untuk saya dalam jangkauan (CHAR_RANGE):

jika frekuensi[i] & 1:

jumlah_peluang += 1

jika (jumlah_peluang > 1):

cetak("Ya")

lain:

cetak("Tidak")

Kesimpulan

Kesimpulannya, masalah palindrom sangat umum dan menarik. Mereka berguna untuk memecahkan berbagai teka-teki matematika dan pertanyaan pemrograman kompetitif.

Jika Anda penasaran untuk belajar tentang ilmu data, lihat Program PG Eksekutif IIIT-B & upGrad dalam Ilmu Data yang dibuat untuk para profesional yang bekerja dan menawarkan 10+ studi kasus & proyek, lokakarya praktis, bimbingan dengan pakar industri, 1 -on-1 dengan mentor industri, 400+ jam pembelajaran dan bantuan pekerjaan dengan perusahaan-perusahaan top.

Berapa kompleksitas waktu dari program Palindrome?

Jumlah operasi dasar yang dilakukan oleh metode ini sering digunakan untuk memperkirakan kompleksitas waktu, dengan asumsi bahwa setiap proses dasar membutuhkan sejumlah waktu untuk diselesaikan. Kompleksitas waktu untuk menentukan suatu bilangan palindrom atau bukan adalah O(log10 (n)). Saat kami memeriksa nilai untuk menjadi palindrom, kami membagi angka atau nilai dengan sepuluh di setiap iterasi. Akibatnya, kompleksitas temporal sama dengan jumlah digit dalam suatu angka.

Bagaimana / berbeda dari // operator di Python?

Ketika kita menggunakan operator bagi, yaitu, satu garis miring (/) di Python, kompilator hanya membagi dua nilai di sisi kanan dan kiri garis miring. Tetapi ketika kita menggunakan garis miring ganda (//), yaitu, pembagian lantai, kita meminta kompiler untuk melakukan proses pembagian biasa, tetapi hasil yang dihasilkannya adalah bilangan bulat terbesar yang mungkin mendekati jawabannya. Bilangan bulat ini kurang dari atau sama dengan hasil pembagian normal.

Berapa gaji tingkat pemula dari Pengembang Python?

Ini adalah fakta yang terkenal bahwa Python banyak digunakan di sebagian besar industri dan perusahaan, menjadikan Python bahasa komputasi dengan bayaran tertinggi kedua. Python juga merupakan bahasa pemrograman favorit di kalangan pelajar dan profesional karena mudah dipelajari dan sangat fleksibel. Gaji tingkat pemula dari Pengembang Python di India rata-rata sekitar INR 4.27.293 per tahun. Profesional yang mempelajari Python memiliki banyak cakupan karena Python juga digunakan di bidang lain seperti Ilmu Data dan Pembelajaran Mesin.