LeetCode in Kotlin

937. Reorder Data in Log Files

Medium

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:

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:

Solution

import java.util.Collections

class Solution {
    fun reorderLogFiles(logs: Array<String>): Array<String?> {
        val digi: MutableList<String> = ArrayList()
        val word: MutableList<String> = ArrayList()
        for (s in logs) {
            if (Character.isDigit(s[s.length - 1])) digi.add(s) else word.add(s)
        }
        Collections.sort(
            word,
            Comparator { s1, s2 ->
                val firstSpacePosition = s1.indexOf(" ")
                val firstWord = s1.substring(firstSpacePosition, s1.length)
                val secondSpacePosition = s2.indexOf(" ")
                val secondWord = s2.substring(secondSpacePosition, s2.length)
                if (firstWord.compareTo(secondWord) == 0) {
                    val firstSpacePosition1 = s1.indexOf(" ")
                    val firstWord1 = s1.substring(0, firstSpacePosition1)
                    val secondSpacePosition1 = s2.indexOf(" ")
                    val secondWord1 = s2.substring(0, secondSpacePosition1)
                    return@Comparator firstWord1.compareTo(secondWord1)
                }
                firstWord.compareTo(secondWord)
            },
        )
        val result = arrayOfNulls<String>(digi.size + word.size)
        var `in` = 0
        for (s in word) result[`in`++] = s
        for (s in digi) result[`in`++] = s
        return result
    }
}
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy