306просмотров
8.1%от подписчиков
19 марта 2026 г.
statsScore: 337
Задача: 937. Reorder Data in Log Files
Сложность: medium Вам дается массив журналов. Каждый журнал представляет собой строку слов, ограниченную пробелами, где первое слово является идентификатором. Существует два типа журналов: Буквенные журналы: Все слова (кроме идентификатора) состоят из строчных английских букв. Цифровые журналы: Все слова (кроме идентификатора) состоят из цифр. Упорядочите эти журналы таким образом: буквенные журналы идут перед всеми цифровыми журналами. Буквенные журналы сортируются лексикографически по их содержанию. Если их содержимое одинаково, то отсортируйте их лексикографически по их идентификаторам. Цифровые журналы сохраняют свой относительный порядок. Верните окончательный порядок журналов. Пример:
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"] 👨💻 Алгоритм: 1⃣Разделить журналы на буквенные и цифровые. 2⃣Отсортировать буквенные журналы:
Лексикографически по содержимому.
Если содержимое одинаково, отсортировать по идентификатору.
Объединить отсортированные буквенные журналы и цифровые журналы в исходном порядке. 3⃣Вернуть окончательный результат. 😎 Решение:
package main import ( "sort" "strings" "unicode"
) func reorderLogFiles(logs []string) []string { sort.SliceStable(logs, func(i, j int) bool { split1 := strings.SplitN(logs[i], " ", 2) split2 := strings.SplitN(logs[j], " ", 2) isDigit1 := unicode.IsDigit(rune(split1[1][0])) isDigit2 := unicode.IsDigit(rune(split2[1][0])) if !isDigit1 && !isDigit2 { if split1[1] != split2[1] { return split1[1] < split2[1] } return split1[0] < split2[0] } return !isDigit1 }) return logs
} Ставь 👍 и забирай 📚 Базу знаний