Reorder Data in Log Files
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:
- The letter-logs come before all digit-logs.
- The letter-logs are sorted lexicographically by their contents. If their contents are the same, then sort them lexicographically by their identifiers.
- The digit-logs maintain their relative ordering.
Return the final order of the logs.
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".
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
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.
- 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.
String.Compare Method (System)
Compares two specified String objects and returns an integer that indicates their relative position in the sort order.
Use comparison interfaces in Visual C# - C#
This article describes the use of IComparer and IComparable interfaces in Visual C#. Original product version: Visual…