สมมติว่าเรามีสตริงที่มีค่าตัวอักษรและตัวเลขและสัญลักษณ์ มีตัวพิมพ์เล็กและตัวพิมพ์ใหญ่เช่นกัน เราต้องตรวจสอบว่าสตริงนั้นสร้างพาลินโดรมหรือไม่โดยพิจารณาเฉพาะอักษรตัวพิมพ์เล็ก (ตัวพิมพ์ใหญ่จะถูกแปลงเป็นตัวพิมพ์เล็ก) สัญลักษณ์อื่น ๆ เช่นลูกน้ำการเว้นวรรคจะถูกละเว้น
สมมติว่าสตริงเป็นเหมือน "A Man, a Plan, a Canal:Panama" จากนั้นเมื่อพิจารณากฎเหล่านี้ก็จะเป็น "amanaplanacalpanama" นี่คือพาลินโดรม
เพื่อแก้ปัญหานี้ ให้ทำตามขั้นตอนเหล่านี้ -
- กำหนด x =“”
- อ่านอักขระ c แต่ละตัวใน str −
- ถ้า c เป็นอักษรตัวพิมพ์เล็กหรือตัวเลข ให้เติม c ลงใน x
- หรือ c เป็นอักษรตัวพิมพ์ใหญ่ จากนั้นแปลงเป็นตัวพิมพ์เล็กและต่อท้าย x
- ถ้า x เป็นพาลินโดรม ให้คืนค่า จริง ไม่เช่นนั้น เท็จ
ตัวอย่าง
ให้เราดูการนำไปใช้เพื่อความเข้าใจที่ดีขึ้น
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
x = ""
diff = ord('a') - ord('A')
for i in s:
if ord(i)>=ord('a') and ord(i)<=ord('z') or ord(i)>=ord("0") and ord(i)<=ord("9"):
x+=i
elif ord(i)>=ord('A') and ord(i)<=ord('Z'):
i = chr(diff+ord(i))
x+=i
#print(s)
#print(x)
return x == x[::-1]
ob1 = Solution()
print(ob1.isPalindrome("A Man, a Plan, a Canal: Panama")) อินพุต
s = "A Man, a Plan, a Canal: Panama"
ผลลัพธ์
true