Reorder Log Files
Question
You have an array of
logs
. Each log is a space delimited string of words.For each log, the first word in each log is an alphanumeric identifier. Then, either:
- Each word after the identifier will consist only of lowercase letters, or;
- Each word after the identifier will consist only of digits.
We will call these two varieties of logs letter-logs and digit-logs. It is guaranteed that each log has at least one word after its identifier.
Reorder the logs so that all of the letter-logs come before any digit-log. The letter-logs are ordered lexicographically ignoring identifier, with the identifier used in case of ties. The digit-logs should be put in their original order.
Return the final order of the logs.
Example 1:
Input: ["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:
- 0 <= logs.length <= 100
- 3 <= logs[i].length <= 100
- logs[i] is guaranteed to have an identifier, and a word after the identifier.
Approach 1: Custom Sort
Intuition and Algorithm
Instead of sorting in the default order, we'll sort in a custom order we specify.
The rules are:
- Letter-logs come before digit-logs;
- Letter-logs are sorted alphanumerically, by content then identifier;
- Digit-logs remain in the same order.
It is straightforward to translate these ideas into code.
1 | class Solution(object): |
Complexity Analysis
Time Complexity:
, where is the total content of logs
.Space Complexity:
. Runtime: 36 ms, faster than 20.01% of Python online submissions for Reorder Log Files.
Memory Usage: 12 MB, less than 32.91% of Python online submissions for Reorder Log Files.