สมมติว่าเรามีสตริงที่เป็นตัวอักษรและตัวเลขคละกัน s เราต้องเรียงตามเงื่อนไขต่อไปนี้
-
ตัวอักษรพิมพ์เล็กที่จัดเรียงทั้งหมดจะถูกวางไว้ก่อนตัวอักษรตัวพิมพ์ใหญ่
-
ตัวพิมพ์ใหญ่เรียงทั้งหมดจะถูกวางไว้ก่อนตัวเลข
-
เรียงเลขคี่ทั้งหมดจะถูกวางไว้ก่อนเรียงเลขคู่
ดังนั้น หากอินพุตเป็น s ="HeLlo1234" เอาต์พุตจะเป็น eloHL1324
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดฟังก์ชัน f() นี่จะใช้เวลาค
- รหัส :=0
- ถ้า c เป็นตัวพิมพ์ใหญ่
- รหัส :=10^3
- มิฉะนั้น เมื่อ c เป็นตัวเลข แล้ว
- รหัส :=10^6
- ถ้า ASCII ของ c เป็นคู่ ดังนั้น
- รหัส :=10^9
- รหัสส่งคืน + ASCII ของ c
- จากวิธีหลักให้ทำดังนี้
- l :=เรียงลำดับรายการของ s และเรียงลำดับอักขระแต่ละตัว c ใน s โดยเรียกใช้ฟังก์ชัน 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