จะตรวจสอบหมายเลข Palindrome ใน Python ได้อย่างไร?

เผยแพร่แล้ว: 2020-11-30

สารบัญ

พาลินโดรมคืออะไร?

palindrome คือคำ ตัวเลข หรือสตริงของอักขระใดๆ ที่อ่านย้อนกลับเมื่ออ่านไปข้างหน้า

ตัวอย่างบางส่วน: detartrated, 1567651, 02/02/2020, Malayalam

บทความนี้จึงแสดงวิธีต่างๆ ที่คุณสามารถเขียนโปรแกรมเพื่อตรวจสอบว่าอินพุตที่กำหนดนั้นเป็นพาลินโดรมหรือไม่ โดยใช้ Python

วิธีที่ 1:

วิธีแก้ปัญหาที่ไร้เดียงสาที่สุดที่นึกถึงคือการกลับตัวเลขและตรวจสอบว่าเท่ากับตัวเลขที่ป้อนหรือไม่ สามารถทำได้ดังนี้

จำนวน = int(อินพุต());

ย้อนกลับ = 0

ในขณะที่ตัวเลข > 0:

หลัก = ตัวเลข % 10

ย้อนกลับ = ย้อนกลับ * 10 + หลัก

ตัวเลข = ตัวเลข // 10

ถ้า number==reverse:

พิมพ์("มันคือ palindrome!")

อื่น:

พิมพ์("มันไม่ใช่พาลินโดรม!")

อย่างไรก็ตาม การทำเช่นนี้จะทำให้โค้ดอ่านง่ายขึ้นและมีโค้ดหลายบรรทัดเกินความจำเป็น ชำระเงินหลักสูตรวิทยาศาสตร์ข้อมูลออนไลน์ของเราเพื่อเรียนรู้เพิ่มเติม

นี่เป็นวิธีสั้นและสะดวกในการตรวจสอบตัวเลขโดยใช้เพียงบรรทัดเดียว

วิธีที่ 2:

เคล็ดลับคือการใช้หมายเลขอินพุตเป็น ประเภทข้อมูล str แทน int จากนั้น คุณสามารถใช้เทคนิคการแบ่งส่วน [::-1] เพื่อรับการกลับด้านของสตริง และตรวจสอบความเท่าเทียมกันใน คำสั่ง if

ตัวเลข = อินพุต ()

ถ้า number == number[::-1]:

พิมพ์("มันคือ palindrome!")

อื่น:

พิมพ์("มันไม่ใช่พาลินโดรม!")

วิธีที่ 3:

นี่เป็นวิธีการแบบเรียกซ้ำเพื่อตรวจสอบว่าอาร์เรย์เป็นพาลินโดรมหรือไม่

def isPalindrome(ตัวเลข, เริ่มต้น, สิ้นสุด):

ถ้า start >= end:

กลับ True

ถ้า ตัวเลข[เริ่ม] == ตัวเลข[จบ]:

ส่งคืน isPalindrome(ตัวเลข, start + 1, end – 1)

อื่น:

กลับ เท็จ

ตัวเลข= รายการ(แผนที่(int, อินพุต().split()))

n=len(ตัวเลข)

ถ้า isPalindrome(ตัวเลข, 0, n-1):

พิมพ์("มันคือ palindrome!")

อื่น:

พิมพ์("มันไม่ใช่พาลินโดรม!")

ฟังก์ชัน isPalindrome จะตรวจสอบว่าองค์ประกอบอาร์เรย์แรกและองค์ประกอบสุดท้ายเหมือนกันหรือไม่ หากไม่เป็นเช่นนั้น ฟังก์ชันจะคืนค่า False ทันที มิฉะนั้น จะตรวจสอบองค์ประกอบสุดขั้วถัดไปซ้ำๆ จนกว่าตัวชี้สองตัวจะมาบรรจบกันที่ตรงกลาง

อ่าน: แนวคิดและหัวข้อโครงการ Python

คำถามสัมภาษณ์การเข้ารหัสทั่วไปที่เกี่ยวข้องกับ palindromes

#1 ซับสตริงพาลินโดรมที่ยาวที่สุด

ให้สตริงเดียวเป็นอินพุต คุณต้องส่งคืนความยาวของสตริงย่อยพาลินโดรมที่ยาวที่สุดในสตริง

เช่น:

อินพุต: 'acbcbabcc'

เอาต์พุต: 5 ('cbabc')

เข้าใกล้:

หากเราพยายามเชื่อมโยงสิ่งนี้กับหนึ่งในปัญหาที่พบบ่อยที่สุดของ DP ซึ่งเป็น สตริงย่อยทั่วไปที่ยาวที่สุด ข้อแตกต่างคือเราได้รับสตริงอินพุตเดียวเท่านั้น ในขณะที่ LCS ใช้สองสตริง เนื่องจากเรารู้ว่า palindrome มีค่าเท่ากับการกลับด้านพอดี เราจึงสามารถสร้างสตริงที่ 2 ให้กลับด้านของอินพุตที่เรากำหนดได้

ตอนนี้สิ่งนี้จะเหมือนกับการค้นหา LCS ทุกประการ

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

LCSub = [[0 สำหรับ ฉันใน ช่วง (n+1)] สำหรับ j ใน ช่วง (m+1)]

ตอบ = 0

สำหรับ ฉันอยู่ใน ช่วง (m+1):

สำหรับ j ใน ช่วง (n+1):

ถ้า (i == 0 หรือ j == 0):

LCSub[i][j] = 0

เอลิ ฟ A[i-1] == B[j-1]:

LCSub[i][j] = 1 + LCSub[i-1][j-1]

ans = max(ans, LCSub[i][j])

อื่น:

LCSub[i][j] = 0

กลับ ans

str1 = อินพุต ()

str2 = str1[::-1]

ม. = เลน(str1)

n = เลน(str2)

print('ความยาวของสตริงย่อยพาลินโดรมที่ยาวที่สุด = ', LCSubstring(str1, str2, m, n))

ดังนั้นสำหรับอินพุตข้างต้น เราได้รับสองสตริงเป็น

'acbcbabcc' และ

'ccbbbca'

สตริงย่อยทั่วไปที่ยาวที่สุดจะกลายเป็น 'cbabc' ซึ่งมีความยาว 5

#2 ตรวจสอบว่า Anagram ของ String เป็น Palindrome หรือไม่

เมื่อกำหนดให้สตริงเป็นอินพุต คุณต้องตรวจสอบว่าแอนนาแกรมใดๆ ของสตริงสามารถเป็นพาลินโดรมได้หรือไม่ และคืนค่าใช่/ไม่ใช่ตามลำดับ

เช่น:

อินพุต: 'pythonpython'

เอาท์พุต: ใช่

(ในขณะที่สตริงเองไม่ใช่ palindrome แอนนาแกรม 'pythonnohtyp' ที่เป็นไปได้จะสร้าง palindrome)

อินพุต: 'แฮร์รี่พอตเตอร์'

เอาท์พุต: ไม่

เข้าใกล้:

หากคุณสังเกตให้ดี เมื่อใดก็ตามที่เรามีสตริงพาลินโดรมที่มีความยาวเท่ากัน อักขระทั้งหมดในครึ่งแรกจะถูกทำซ้ำในครึ่งหลัง ซึ่งหมายความว่าอักขระทั้งหมดที่มีอยู่ในสตริงเกิดขึ้นเป็น จำนวน คู่

เมื่อความยาวเป็นเลขคี่ อักขระทั้งหมดทางด้านซ้ายขององค์ประกอบตรงกลาง (ไม่รวม) จะเกิดขึ้นจำนวนครั้งเท่ากันที่ด้านขวาขององค์ประกอบตรงกลาง ซึ่งหมายความว่ามีอักขระเพียงตัวเดียวที่เกิดขึ้นเป็น จำนวน คี่ (องค์ประกอบกลาง) และอักขระอื่นทั้งหมดเกิดขึ้นเป็นจำนวนเท่ากัน

เมื่อใช้ตรรกะนี้ เราสามารถจัดเก็บจำนวนอักขระในสตริงในแฮช และตรวจสอบข้อจำกัดเหล่านี้เพื่อรับคำตอบที่ต้องการ

CHAR_RANGE = 256

str1 = อินพุต ()

ความถี่ = [0 สำหรับ ฉันใน ช่วง (CHAR_RANGE)]

สำหรับ ฉันใน str1:

freq[ord(i)] += 1 #ord(x) ให้ค่ายูนิโค้ดของ x

num_odds = 0

สำหรับ ฉันอยู่ใน ช่วง (CHAR_RANGE):

ถ้า freq[i] & 1:

num_odds += 1

ถ้า (num_odds > 1):

พิมพ์("ใช่")

อื่น:

พิมพ์ (“ไม่”)

บทสรุป

สรุปได้ว่าปัญหาพาลินโดรมเป็นเรื่องปกติและน่าสนใจมาก มีประโยชน์ในการไขปริศนาทางคณิตศาสตร์และคำถามเกี่ยวกับการเขียนโปรแกรมเชิงแข่งขัน

หากคุณอยากเรียนรู้เกี่ยวกับวิทยาศาสตร์ข้อมูล ลองดูโปรแกรม Executive PG ของ IIIT-B & upGrad ใน Data Science ซึ่งสร้างขึ้นสำหรับมืออาชีพที่ทำงานและมีกรณีศึกษาและโครงการมากกว่า 10 รายการ เวิร์กช็อปภาคปฏิบัติจริง การให้คำปรึกษากับผู้เชี่ยวชาญในอุตสาหกรรม 1 -on-1 พร้อมที่ปรึกษาในอุตสาหกรรม การเรียนรู้มากกว่า 400 ชั่วโมงและความช่วยเหลือด้านงานกับบริษัทชั้นนำ

ความซับซ้อนของเวลาของโปรแกรม Palindrome คืออะไร?

จำนวนของการดำเนินการเบื้องต้นที่ทำโดยวิธีการนี้มักจะใช้เพื่อประมาณความซับซ้อนของเวลา โดยสมมติว่ากระบวนการพื้นฐานแต่ละขั้นตอนใช้เวลาที่กำหนดไว้ในการดำเนินการให้เสร็จสิ้น ความซับซ้อนของเวลาในการกำหนดว่าตัวเลขเป็นพาลินโดรมหรือไม่คือ O(log10 (n)) เมื่อเราตรวจสอบค่าที่จะเป็นพาลินโดรม เราจะหารตัวเลขหรือค่าด้วยสิบในการวนซ้ำแต่ละครั้ง เป็นผลให้ความซับซ้อนชั่วคราวเท่ากับจำนวนหลักในตัวเลข

/ แตกต่างจาก // ตัวดำเนินการใน Python อย่างไร

เมื่อเราใช้ตัวดำเนินการการหาร เช่น เครื่องหมายทับ (/) เดียวใน Python คอมไพเลอร์จะแบ่งค่าสองค่าทางด้านขวาและด้านซ้ายของเครื่องหมายทับ แต่เมื่อเราใช้สแลชคู่ (//) เช่น การแบ่งพื้น เราขอให้คอมไพเลอร์ดำเนินการตามกระบวนการหารทั่วไป แต่ผลลัพธ์ที่ได้คือจำนวนเต็มที่มากที่สุดใกล้กับคำตอบ จำนวนเต็มนี้น้อยกว่าหรือเท่ากับผลลัพธ์ของการหารปกติ

เงินเดือนระดับเริ่มต้นของ Python Developer คืออะไร?

เป็นที่ทราบกันดีอยู่แล้วว่า Python ถูกใช้กันอย่างแพร่หลายในอุตสาหกรรมและบริษัทต่างๆ ส่วนใหญ่ ทำให้ Python เป็นภาษาคอมพิวเตอร์ที่มีค่าตอบแทนสูงสุดเป็นอันดับสอง Python ยังเป็นภาษาการเขียนโปรแกรมที่ชื่นชอบในหมู่นักเรียนและมืออาชีพ เนื่องจากเรียนรู้ได้ง่ายและมีความยืดหยุ่นสูง เงินเดือนระดับเริ่มต้นของ Python Developer ในอินเดียอยู่ที่ประมาณ 4,27,293 INR ต่อปีโดยเฉลี่ย ผู้เชี่ยวชาญที่เรียนรู้ Python นั้นมีขอบเขตมากมาย เนื่องจาก Python ยังถูกใช้ในด้านอื่นๆ เช่น Data Science และ Machine Learning