937. Reorder Data in Log Files
mediumSort an array of logs where letter-logs go first (lexicographic by content then identifier) and digit-logs keep relative order. A custom-key sort with a tuple tiebreaker.
By Sam K., Founder, InterviewChamp.AI · Last verified
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 after the identifier consist of lowercase English letters) and digit-logs (all words after the identifier consist of digits). Reorder these logs so that: (1) all letter-logs come before any digit-log; (2) letter-logs are sorted lexicographically by their contents — if contents are the same, then sort by identifier; (3) digit-logs maintain their relative ordering. Return the final order of the logs.
Constraints
1 <= logs.length <= 1003 <= logs[i].length <= 100All the 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.
Examples
Example 1
logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]Solve it now
Free. No sign-up. Python and JavaScript run instantly in your browser.
Hints
Progressive — try the first before opening the next.
Hint 1
Split each log into identifier and content. Classify by whether the first content character is a digit.
Hint 2
Use a stable sort with a key that puts digit-logs after letter-logs.
Hint 3
Key for letter-logs: (0, content, identifier). Key for digit-logs: (1,) so they all tie and the stable sort preserves their order.
Solution approach
Reveal approach
Stable sort with a tuple key. For each log, split into identifier and rest at the first space. If rest[0] is a digit, the key is (1,) — all digit-logs tie and the stable sort keeps their original order. Otherwise the key is (0, rest, identifier) — letter-logs come first, sorted by content with identifier as tiebreaker. O(n * m log n) time where n = number of logs and m = average log length (string comparison cost). O(n * m) space for the keys and the output.
Complexity
- Time
- O(n * m log n)
- Space
- O(n * m)
Related patterns
- custom-sort
- string-parsing
- stable-sort
Related problems
Asked at
Companies reported asking this problem (sourced from public Glassdoor, Blind, and Levels.fyi interview posts).
- Amazon
More Strings practice problems
- 3. Longest Substring Without Repeating Characters
- 5. Longest Palindromic Substring
- 6. Zigzag Conversion
- 14. Longest Common Prefix
- 20. Valid Parentheses
- 28. Find the Index of the First Occurrence in a String
- 49. Group Anagrams
- 58. Length of Last Word