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