Reorder Data in Log Files - Problem

You are given an array of logs. Each log is a space-delimited string of words, where the first word is the identifier.

There are two types of logs:

  • Letter-logs: All words (except the identifier) consist of lowercase English letters.
  • Digit-logs: All words (except the identifier) consist of digits.

Reorder these logs so that:

  1. The letter-logs come before all digit-logs.
  2. The letter-logs are sorted lexicographically by their contents. If their contents are the same, then sort them lexicographically by their identifiers.
  3. The digit-logs maintain their relative ordering.

Return the final order of the logs.

Input & Output

Example 1 — Mixed Log Types
$ Input: logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
Output: ["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]
💡 Note: Letter-logs come first, sorted by content: "art can" < "art zero" < "own kit dig". Digit-logs maintain original order.
Example 2 — Same Content Different IDs
$ Input: logs = ["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"]
Output: ["g1 act car","a8 act zoo","ab1 off key dog","a1 9 2 3 1","zo4 4 7"]
💡 Note: Letter-logs: "act car" < "act zoo" < "off key dog". For same content "act", sort by identifier: "g1" < "a8".
Example 3 — Only Digit Logs
$ Input: logs = ["dig1 8 1 5 1","dig2 3 6","dig3 1 9"]
Output: ["dig1 8 1 5 1","dig2 3 6","dig3 1 9"]
💡 Note: All digit-logs maintain their original relative ordering.

Constraints

  • 1 ≤ logs.length ≤ 100
  • 3 ≤ logs[i].length ≤ 100
  • All tokens of logs[i] are separated by a single space
  • logs[i] is guaranteed to have an identifier and at least one word after the identifier

Visualization

Tap to expand
Reorder Data in Log Files INPUT logs[] array: "dig1 8 1 5 1" DIGIT "let1 art can" LETTER "dig2 3 6" DIGIT "let2 own kit dig" LETTER "let3 art zero" LETTER Log Structure: [identifier] [content...] Letter-log (a-z) Digit-log (0-9) ALGORITHM STEPS 1 Separate Logs Split into letter-logs and digit-logs arrays 2 Sort Letter-logs By content first, then by identifier if tied 3 Keep Digit Order Maintain relative ordering (stable) 4 Concatenate letter-logs + digit-logs Sorting comparison: "art can" vs "art zero" --> "can" < "zero" [OK] "art zero" vs "own kit dig" --> "art" < "own" [OK] Same content --> compare IDs FINAL RESULT Reordered logs[]: Letter-logs (sorted): "let1 art can" [0] "let3 art zero" [1] "let2 own kit dig" [2] Digit-logs (original order): "dig1 8 1 5 1" [3] "dig2 3 6" [4] REORDERING COMPLETE 5 logs processed [OK] Time: O(n*k*log n) Space: O(n*k) k = max length Key Insight: Use custom comparator that extracts content (after identifier) for primary sort, identifier for secondary. Digit-logs don't need sorting - just preserve insertion order using stable partition or separate collection. The key is to split the log into (identifier, content) tuple and compare content lexicographically first. TutorialsPoint - Reorder Data in Log Files | Optimal Solution (Custom Sort)
Asked in
Amazon 45 Google 12
185.0K Views
Medium Frequency
~15 min Avg. Time
1.6K Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen