Skip to main content

937. Reorder Data in Log Files

Description

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.

참고

You can read the full description here.

Solution

Approach

  1. Identifier(alphabet + number) + nums only or chars only
  2. To check whether it is a number, use string.isdigit
  3. Seperate with letters[], digits[]
  4. Sort letters only

Implementation

from typing import List

class Solution:
def reorderLogFiles(self, logs: List[str]) -> List[str]:
letters, digits = [], []
for log in logs:
# the first value(except for identifier) is important.
if log.split()[1].isdigit():
digits.append(log)
else:
letters.append(log)
letters.sort(key=lambda x: (x.split()[1:], x.split()[0]))
return letters + digits

Complexity Analysis

  • nn: length of logs
  • Time Complexity: O(nlogn)O(n \log n)
  • Space Complexity: O(n)O(n)