Reorder Data in Log Files

Photo by Thomas Peham on Unsplash

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.

Example 1:

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"]
The letter-log contents are all different, so their ordering is "art can", "art zero", "own kit dig".
The digit-logs have a relative order of "dig1 8 1 5 1", "dig2 3 6".

Example 2:

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"]


  • 1 <= logs.length <= 100
  • 3 <= logs[i].length <= 100
  • All 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.

Very basic Idea here

create two lists: letter_logs, digit_logs
sort letter_logs
return letter_logs + digit_logs

That way it would cost us O(MKlogK), with k = len(letter_logs). Of course k can degrade to n in case there are no digit_logs.

Steps :

  • The idea in this solution is to create two separate lists that contains letter and digit logs.
  • This makes the sort go quicker since the digit logs don't need to be sorted.
  • An object is used to store the identifier, the contents, and the full log line of each log entry
  • We go through each line in the logs array and populate the letters and digit lists.
  • After the letter and digit lists are populated, only the letter logs are sorted according to the requirements.
  • Once the sort is complete, the result is returned

Using the above idea implemented custom sort using C# inbuild method Compare from IComparable interface.




Full Stack Programmer, love to solve problem’s during free time.

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Recapitulation of YIELD APP PROJECT AMA event held at AMA LOVERS CLUB.

Detect text overflow in Jetpack Compose

Smart Code Engine 1.7.0 | New OCR-based Credit Card Scanner for Mobile and Web apps

4 Tools to Help Your Product Team Become More Effective

How can one achieve proper elements alignment on a web-page?

A must know Regex trick

Custom Domain Email For 0 Bucks.

A complete beginner’s introduction to Session Initiation Protocol (SIP)

Image of telecommunication network signals across the globe

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store


Full Stack Programmer, love to solve problem’s during free time.

More from Medium

Design In-Memory File System

Interviewing Experience with PayPay Japan

Design a Parking Lot System

Kafka — A Distributed Streaming Platform