Deník Leetcode:890. Najít a nahradit vzor

Toto je nová série, kde dokumentuji svůj boj s otázkami leetcode a doufám, že jakkoli malé publikum mi dá motivaci pokračovat.

Tato otázka je jako médium otázky média. Není to těžké, ale vyžaduje to malý stupeň logického skoku (myslel jsem, že jsem tuto otázku již udělal, ale co už).

Uvědomění je, že byste mohli jednoduše transformovat každé slovo na abstraktní reprezentaci v celých číslech, takže nebudete spojovat řetězec po řetězci, ale ints. Tato abstrakce se pak stane jako společný jazyk mezi všemi slovy a vy můžete jen porovnat, zda se transformovaná slova shodují s transformovaným vzorem.

Níže je můj kód

var findAndReplacePattern = function(words, pattern) {
    const transPattern = transform(pattern);
    const answers = [];

    words.forEach(function(word){
        if(transPattern === transform(word)) {
            answers.push(word);
        }
    });

    return answers;
};

function transform (word) {
    const letters = word.split('');
    const map = {};
    let count = 1;

    letters.forEach(function(letter, index){
        if(!map.hasOwnProperty(letter)) {
            map[letter] = count++;
        } 

        letters[index] = map[letter];
    });

    return letters.join();
}

všimněte si, že tento kód má malou výhradu, a to, že děláme .join(), místo intuitivnějšího .join(''). Důvodem je to, že jakmile jsou písmena více než 9, může existovat kombinace slov a vzorů, která se po spojení '' nějak transformuje na stejné ints, například když t =11 a a =1, pak t může být neshoda s aa.

Po přečtení tohoto článku mi dejte vědět, co vás napadne, DÍKY!