สมมติว่าเรามีสตริงที่มีค่าอักษรตัวเลขและสัญลักษณ์ มีตัวพิมพ์เล็กและพิมพ์ใหญ่ เราต้องตรวจสอบว่าสตริงเป็น palindrome หรือไม่ โดยพิจารณาเฉพาะตัวพิมพ์เล็ก (ตัวพิมพ์ใหญ่จะแปลงเป็นพิมพ์เล็ก) สัญลักษณ์อื่นๆ เช่น คอมมา ช่องว่างจะถูกเพิกเฉย
สมมติสตริงเป็น "A Man, a Plan, a Canal: Panama" ตามกฎเหล่านี้จะกลายเป็น "amanaplanacanalpanama" ซึ่งเป็น palindrome
วิธีการแก้ปัญหา
- กำหนด x = ""
- อ่านแต่ละตัวอักษร c ใน str:
- ถ้า c เป็นตัวพิมพ์เล็กหรือตัวเลข ให้ต่อ c เข้า x
- มิฉะนั้น c เป็นตัวพิมพ์ใหญ่ ให้แปลงเป็นพิมพ์เล็กและต่อเข้า x
- ถ้า x เป็น palindrome ให้คืนค่า True มิฉะนั้น False
ตัวอย่าง
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
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