จะตรวจสอบหมายเลข 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