สมมติว่าเรามีสตริงที่เป็นตัวอักษรและตัวเลขคละกัน 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