题目内容:
在使用哈夫曼编码(由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")