Python编程基础 第六章 编程练习 在使用哈夫曼编码(由0和1组成的字符串)表示字符时,要求任一字符的哈夫曼编码都不能是其他字符哈夫曼编码的前缀,否则无法根据哈夫曼编码解码得到其对应的字符

题目内容:

在使用哈夫曼编码(由0和1组成的字符串)表示字符时,要求任一字符的哈夫曼编码都不能是其他字符哈夫曼编码的前缀,否则无法根据哈夫曼编码解码得到其对应的字符。请编写程序:判断每一个字符的哈夫曼编码是否是另一个字符哈夫曼编码的前缀。

输入格式:

先在第1行输入一个整数n,表示哈夫曼编码的个数。

在第2~n+1行依次输入每一个哈夫曼编码。

输出格式:

如果检测到某一个哈夫曼编码是另一个哈夫曼编码的前缀,则输出invalid;否则,如果任一个哈夫曼编码都不是其他哈夫曼编码的前缀,则输出valid。

输入样例:

3

1001

10001

101

输出样例:

valid

输入样例:

5

1001

10001

100

101

11

输出样例:

invalid

时间限制:500ms内存限制:32000kb

代码:

import re

number = int(input())

Huffman_Coding_list = []
while number > 0:
    Huffman_Coding = input()
    Huffman_Coding_list.append(Huffman_Coding)
    number -= 1

# 判断是否有重复编码
if len(Huffman_Coding_list) != len(set(Huffman_Coding_list)):
    print("invalid")
else:
    is_valid = True
    Huffman_Coding_list.sort()  
    for i, huffman_coding_i in enumerate(Huffman_Coding_list[:-1]):
       if is_valid:
           pattern = re.compile(huffman_coding_i)
           for huffman_coding_j in Huffman_Coding_list[i + 1:]:
                 if pattern.match(huffman_coding_j):
                     is_valid = False
                     break
    if is_valid:
        print("valid")
    else:
        print("invalid")
    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值