[Árbol de prefijos de Leetcode (árbol de diccionario) C ++] 820. Codificación corta de palabras

Codificación corta de palabras 820.

Inserte la descripción de la imagen aquí

class TrieNode {
    
    
public:
    vector<TrieNode*> children = vector<TrieNode*>(26, nullptr);
    TrieNode() {
    
    }
};


class Solution {
    
    
public:
    TrieNode* root = new TrieNode();
    TrieNode* p;
    int len = 0;

    void reInsert(string word) {
    
    
        p = root;
        for(int ii = word.size() - 1; ii >= 0; ii--) {
    
    
            if(!p->children[word[ii] - 'a']) {
    
    
                p->children[word[ii] - 'a'] = new TrieNode();
            }
            p = p->children[word[ii] - 'a'];
        }
    }

    void dfs(TrieNode* node, int depth) {
    
    
        bool is_leaf = true;
        for(int ii = 0; ii < 26; ii++) {
    
    
            if(node->children[ii]) {
    
    
                dfs(node->children[ii], depth + 1);
                is_leaf = false;
            }
        }
        if(is_leaf) len += depth+1;
    }

    int minimumLengthEncoding(vector<string>& words) {
    
    
        for(auto &word : words) reInsert(word);
        dfs(root, 0);
        return len;
    }
};

Supongo que te gusta

Origin blog.csdn.net/m0_37454852/article/details/113763210
Recomendado
Clasificación