给定一个字符串,请计算每个字符在字符串中的出现次数,并基于字符出现的频率构建哈夫曼编码树,生成每个字符的哈夫曼编码。你需要输出指定字符的编码长度。
构建哈夫曼编码树时遵循以下规则: 1.优先合并出现频率较低的节点。 2.若频率相同,优先合并非叶节点;如果没有非叶节点可合并,则合并字母序较前的字符。
输入包含两行:
第一行是要编码的字符串,只包含大写英文字母。 第二行是一个大写字母,表示要查询编码长度的字符。
输出一个整数,为指定字符在哈夫曼编码中的编码长度。
ABRACADABRA D
4
对于样例中的每个字母,出现次数如下:
A:5 / B:2 / C:1 / D:1 / R:2
1.合并 C 和 D ,形成新节点 CD ,频率为 2 ;
2.合并 CD 和 B ,形成新节点 BCD ,频率为 4 ;
3.合并 CDB 和 R ,形成新节点 CDBR ,频率为 6 ;
4.合并 CDBR 和 A ,形成新节点 CDBRA ,频率为 11 。
因此 A 在第一层, R 在第二层, B 在第三层, C 和 D 在第四层。
查询D的哈夫曼编码程度的结果为 4 。