Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Reorder Data in Log Files (จัดเรียง Log Files) ใน Python

โจทย์: จัดเรียง Log files ให้ Letter-logs (มีตัวอักษร) อยู่หน้า Digit-logs (มีตัวเลข) Letter-logs เรียง Lexicographically โดยเนื้อหา (Content) ก่อน ตามด้วย Identifier หาก Content เหมือนกัน Digit-logs คงลำดับเดิม

Input/Output

Input:  ["dig1 9 2 5 2", "let1 art can", "dig2 4 8", "let2 own kit dig", "let3 art zero"]
Output: ["let1 art can", "let3 art zero", "let2 own kit dig", "dig1 9 2 5 2", "dig2 4 8"]

อัลกอริทึม

  1. แยก Logs เป็น 2 กลุ่ม: Letter-logs และ Digit-logs (เช็คคำที่ 2 ว่าเป็น Digit หรือไม่)
  2. Sort Letter-logs ด้วย Key: (Content, Identifier)
  3. รวม Letter-logs (เรียงแล้ว) + Digit-logs (ลำดับเดิม)

ตัวอย่างโค้ด

class Solution:
    def reorderLogFiles(self, logs):
        words = []  # Letter-logs: (identifier, content)
        nums = []   # Digit-logs: original string
        
        for log in logs:
            parts = log.split()
            if parts[1].isdigit():
                nums.append(log)
            else:
                words.append((parts[0], ' '.join(parts[1:])))
        
        # Sort by content, then by identifier
        words.sort(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"]))

ผลลัพธ์

['let1 art can', 'let3 art zero', 'let2 own kit dig', 'dig1 9 2 5 2', 'dig2 4 8']

Complexity: O(N log N) จากการ Sort, N = จำนวน Letter-logs