old_contents: """Leetcode 937. Reorder Log Files
  Easy
  
  URL: https://leetcode.com/problems/reorder-log-files/
  
  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.
  """
  
  class Solution(object):
      def reorderLogFiles(self, logs):
          """
          :type logs: List[str]
          :rtype: List[str]
          """
          pass
  
  
  def main():
      pass
  
  
  if __name__ == '__main__':
      main()
  
new_contents: """Leetcode 937. Reorder Log Files
  Easy
  
  URL: https://leetcode.com/problems/reorder-log-files/
  
  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.
  """
  
  class Solution(object):
      def reorderLogFiles(self, logs):
          """
          :type logs: List[str]
          :rtype: List[str]
  
          Time complexity: O(n*logn), where n is the number of logs.
          Space complexity: O(n).
          """
          # Store letters and digits separately.
          letters = []
          digits = []
  
          for l in logs:
              if l.split()[1].isdigit():
                  digits.append(l)
              else:
                  letters.append(l)
  
          # Sort letters by identifier and in lexicographical order.
          letters.sort(key=lambda x: x.split()[0])
          letters.sort(key=lambda x: x.split()[1:])
  
          return letters + digits
  
  
  def main():
      logs =  ["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"]
      print Solution().reorderLogFiles(logs)
  
  
  if __name__ == '__main__':
      main()
  
subject: Complete sort sol