สมมติว่าเรามีสตริง alphanumeric s เราต้องจัดเรียงตามเงื่อนไขดังนี้:
- ตัวอักษรพิมพ์เล็กที่จัดเรียงแล้ว จะอยู่หน้าตัวอักษรพิมพ์ใหญ่
- ตัวอักษรพิมพ์ใหญ่ที่จัดเรียงแล้ว จะอยู่หน้าตัวเลข
- ตัวเลขคี่ที่จัดเรียงแล้ว จะอยู่หน้าตัวเลขคู่ที่จัดเรียงแล้ว
ตัวอย่างเช่น หาก s = "HeLlo1234" ผลลัพธ์จะเป็น eloHL1324
ขั้นตอนการแก้ปัญหา
- กำหนดฟังก์ชัน f(c) รับตัวอักษร c:
- code := 0
- ถ้า c เป็นพิมพ์ใหญ่: code := 10^3
- ถ้า c เป็นตัวเลข: code := 10^6
- ถ้า ASCII ของ c เป็นเลขคู่: code := 10^9
- คืนค่า code + ASCII ของ c
- จากฟังก์ชันหลัก:
- l := รายการที่จัดเรียง s โดยเรียงลำดับแต่ละตัวอักษร c ด้วยการเรียก f()
- รวมตัวอักษรใน l แล้วคืนค่า
ตัวอย่างโค้ด
def f(c):
code = 0
if c.isupper():
code = 10 ** 3
elif c.isdigit():
code = 10 ** 6
if ord(c) % 2 == 0:
code = 10 ** 9
return code + ord(c)
def solve(s):
l = sorted(s, key=lambda c: f(c))
return ''.join(l)
s = "HeLlo1234"
print(solve(s))
อินพุต
"HeLlo1234"
เอาต์พุต
eloHL1324