题目大意:
给出n个不同的仅由小写字母构成的变量名,要求你对其取前缀将其简化,使简化后的变量名各不相同并且最终的总长度最小。
解题思路:
对单词建立字典树,记录每个单词的长度。然后从树的叶子结点开始向上进行启发式合并,这个过程用multiset进行维护。
启发式合并在这道题中的应用,个人的理解为到达这个结点时,发现这个结点还是空的时候,即可以将一个变量名简化为当前结点代表的变量名的时候,我们要选择它下面的所有变量名中名字最长的那个进行简化,为了便于维护,那就从下往上不断记录到此位置时可以简化的单词长度为多少。在代码中的体现就是DFS中的部分。35-37行为向上传递值,29、39-43行为简化操作。
Mycode:
1 |
|