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() {}
}