题目内容:

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

输入格式:

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

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

输出格式:

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

输入样例:

3

1001

10001

101

输出样例:

valid

输入样例:

5

1001

10001

100

101

11

输出样例:

invalid

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

代码:

import renumber = 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 = TrueHuffman_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 = Falsebreakif is_valid:print("valid")else:print("invalid")