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;
}
};
【leetcode 前缀树(字典树) C++】820. Short Encoding of Words
猜你喜欢
转载自blog.csdn.net/m0_37454852/article/details/113763210
今日推荐
周排行