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

Constraints:

  • 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

Last week in FAUN: Learning Go, MetalLB Configuration in Minikube & Python Logging Best Practices

How to get Started in the Cloud: Skills

LVM — Increase disk space (extend partition or crypt volume)

Creating a Multicloud Setup of Kubernetes using Ansible Roles

Straight to the Point: Kubernetes Probes

Method swizzling in iOS swift

A Complete Guide To Writing Comments In Python

How To Fix No Input File Specified Error On WordPress

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
Jaydeep

Jaydeep

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

More from Medium

Anatomy of a System Design Interview

CRACKING THE SYSTEM DESIGN INTERVIEW — The Plan

Shopify Developer Interview Experience

A Crash Course in NoSQL vs SQL