class Solution { private TrieNode root = new TrieNode(); public int minimumLengthEncoding(String[] words) { int res = 0; Arrays.sort(words,(o1,o2)->o2.length()-o1.length());// 需要排序先插入长的 for(String s : words) { res += insert(s); } return res; } public int insert(String s) { TrieNode node = root; boolean f = false; for(int i = s.length() - 1; i > -1; i--) { char c = s.charAt(i); if(node.children[c-'a'] == null) { f = true; node.children[c-'a'] = new TrieNode(c); } node = node.children[c-'a']; } if(f) return s.length()+1; // 是新单词就全部加入并在结尾加上'#' else return 0; // 不是新单词就不用加 } } class TrieNode { char c; TrieNode[] children = new TrieNode[26]; public TrieNode(){} public TrieNode (char c) { this.c = c; } }