Я пытаюсь решить алгоритм Reorder Data in Log Files.
У вас есть массив журналов. Каждый журнал представляет собой строку слов, разделенных пробелами.
Для каждого журнала первое слово в каждом журнале представляет собой буквенно-цифровой идентификатор c. Тогда либо:
Каждое слово после идентификатора будет состоять только из строчных букв, либо; Каждое слово после идентификатора будет состоять только из цифр. Мы будем называть эти две разновидности журналов letter-log и di git -log. Гарантируется, что каждый журнал имеет хотя бы одно слово после идентификатора.
Переупорядочить журналы так, чтобы все буквенные журналы располагались перед любым di git -log. Письма-журналы упорядочены лексикографически без учета идентификатора, с идентификатором, используемым в случае связи. Журналы di git должны быть расположены в исходном порядке.
Возвращает окончательный порядок журналов.
Пример:
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"]
Моя идея карта для цифр и одна для букв. Я сделал это. Затем мне нужно будет отсортировать цифры и буквы и добавить все отсортированные буквы в мой массив ответов и все отсортированные цифры в свой массив ответов.
var reorderLogFiles = function(logs) {
if(!logs || logs.length === 0)
return [];
let numbers = {
'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6,
'7': 7, '8': 8, '9': 9
};
let digits = new Map();
let letters = new Map();
for(let i=0; i<logs.length; i++) {
const log = logs[i].split(" ");
if(numbers[log[1]] !== undefined)
digits.set(log[0], log.splice(1, log.length));
else
letters.set(log[0], log.splice(1, log.length));
}
// How can I sort letter and digits?
let ans = [];
for(const [key, value] of sortedLetters) {
const temp = key + " " + value.join(" ");
ans.push(temp);
}
for(const [key, value] of sortedDigits) {
const temp = key + " " + value.join(" ");
ans.push(temp);
}
return ans;
};