240246 - 哈夫曼编码长度

题目描述

给定一个字符串,请计算每个字符在字符串中的出现次数,并基于字符出现的频率构建哈夫曼编码树,生成每个字符的哈夫曼编码。你需要输出指定字符的编码长度。

构建哈夫曼编码树时遵循以下规则: 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 。

标签
题目参数
时间限制 1 秒
内存限制 128 MB
提交次数 17
通过人数 10
金币数量 3 枚
难度 提高


上一题 下一题