สมมติว่าเรามีอาร์เรย์บันทึก ในอาร์เรย์นั้นแต่ละรายการเป็นสตริงคำที่คั่นด้วยช่องว่าง คำแรกในแต่ละบันทึกคือตัวระบุที่เป็นตัวอักษรและตัวเลข จากนั้นจะมีสตริงประเภทต่างๆ ดังต่อไปนี้ −
- แต่ละคำหลังรหัสจะประกอบด้วยตัวพิมพ์เล็กเท่านั้น
- แต่ละคำหลังรหัสจะประกอบด้วยตัวเลขเท่านั้น
เราจะเรียกบันทึกทั้งสองประเภทนี้ว่าบันทึกจดหมายและบันทึกตัวเลขตามลำดับ และ ti รับประกันว่าบันทึกแต่ละรายการมีคำหลังรหัสอย่างน้อยหนึ่งคำ
เราต้องเรียงลำดับบันทึกใหม่เพื่อให้บันทึกตัวอักษรทั้งหมดอยู่ก่อนบันทึกหลัก และบันทึกของจดหมายจะถูกเรียงลำดับโดยไม่สนใจตัวระบุ โดยใช้ตัวระบุในกรณีที่มีความสัมพันธ์กัน สุดท้าย ควรวางบันทึกตัวเลขในลำดับเดิม ดังนั้นเราจึงต้องส่งคืนลำดับสุดท้ายของบันทึก
ดังนั้น หากอินพุตเป็นเหมือน logs =["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"] ผลลัพธ์จะเป็น [ "let1 art can","let3 art zero","let2 own kit dig","dig1 9 2 52","dig2 4 8"]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- คำ :=รายการใหม่
- nums :=รายการใหม่
- สำหรับบันทึกการเข้าสู่ระบบแต่ละครั้ง ให้ทำ
- s :=รายการคำในบันทึก
- ถ้าคำที่สองเป็นตัวเลข
- แทรกบันทึกที่ส่วนท้ายของ nums
- มิฉะนั้น
- รวมแต่ละองค์ประกอบของ s โดยคั่นด้วยการเว้นวรรคและแทรกลงในอาร์เรย์คำที่ส่วนท้าย
- words =จากนั้นจัดเรียงคำอาร์เรย์ lexicographically
- words :=เข้าร่วมแต่ละองค์ประกอบของอาร์เรย์คำโดยคั่นด้วยการเว้นวรรคและสร้างรายการสตริง
- รวมสองรายการคำและ nums แล้วกลับ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def reorderLogFiles(self, logs): words = [] nums = [] for log in logs: s = log.split() if s[1].isdigit(): nums.append(log) else: words.append((s[0], ' '.join(s[1:]))) words = sorted(words, key=lambda x: (x[1],x[0])) words = [' '.join(w) for w in words] return words + nums ob = Solution() print(ob.reorderLogFiles(["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"]))
อินพุต
["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"]
ผลลัพธ์
['let1 art can', 'let3 art zero', 'let2 own kit dig', 'dig1 9 2 5 2', 'dig24 8']