Implémentation Java de codage de compression de LeetCode (Trie) 820 mots

820. La compression de mot de codage

Étant donné une liste de mots, cette liste sera codé comme un indice chaîne de S et une liste d'index A.

Par exemple, si la liste est [ "temps", "moi", "cloche"], nous pouvons être Exprimé en S = "# temps cloche #" et index = [0, 2, 5].

Pour chaque indice, nous pouvons commencer par la lecture de l'index de chaîne de la chaîne S en position jusqu'à la fin de « # », pour restaurer notre liste précédente des mots.

Ensuite, la longueur minimale de la chaîne à la réussite d'une liste de mots donnée pour l'encodage est combien?

exemple:

Entrée: mots = [ "temps", "moi", "cloche"]
Sortie: 10
Description: S = "# temps cloche # ", index = [0, 2, 5].

Conseils:

. 1 <= words.length <= 2000
. 1 <= mots [I] .length <=. 7
chaque minuscule mot.

class Solution {
    public int minimumLengthEncoding(String[] words) {
        int len = 0;
        Trie trie = new Trie(); 
        Arrays.sort(words, (s1, s2) -> s2.length() - s1.length()); 
        for (String word: words) {
            len += trie.insert(word);
        }
        return len;
    }
}

// 定义tire
class Trie {
    
    TrieNode root;
    
    public Trie() {
        root = new TrieNode();
    }

    public int insert(String word) {
        TrieNode cur = root;
        boolean isNew = false;
        // 倒着插入单词
        for (int i = word.length() - 1; i >= 0; i--) {
            int c = word.charAt(i) - 'a';
            if (cur.children[c] == null) {
                isNew = true; 
                cur.children[c] = new TrieNode();
            }
            cur = cur.children[c];
        } 
        return isNew? word.length() + 1: 0;
    }
}

class TrieNode {
    char val;
    TrieNode[] children = new TrieNode[26];

    public TrieNode() {}
}
Publié 1653 articles originaux · louange de won 20000 + · vues 3,01 millions +

Je suppose que tu aimes

Origine blog.csdn.net/a1439775520/article/details/105157256
conseillé
Classement