Trong lý thuyết thông tin, "mã tiền tố" là một từ điển trong đó không có khóa nào là tiền tố của người khác. Nói cách khác, điều này có nghĩa là không có chuỗi nào bắt đầu bằng bất kỳ chuỗi nào khác.
Ví dụ, {"9", "55"}
là một mã tiền tố, nhưng {"5", "9", "55"}
không phải.
Ưu điểm lớn nhất của điều này là văn bản được mã hóa có thể được viết ra mà không có dấu phân cách giữa chúng và nó vẫn sẽ được giải mã duy nhất. Điều này xuất hiện trong các thuật toán nén như mã hóa Huffman , vốn luôn tạo mã tiền tố tối ưu.
Nhiệm vụ của bạn rất đơn giản: Đưa ra một danh sách các chuỗi, xác định xem đó có phải là mã tiền tố hợp lệ hay không.
Đầu vào của bạn:
Sẽ là một danh sách các chuỗi trong bất kỳ định dạng hợp lý .
Sẽ chỉ chứa các chuỗi ASCII có thể in.
Sẽ không chứa bất kỳ chuỗi trống nào.
Đầu ra của bạn sẽ là giá trị trung thực / falsey : Sự thật nếu đó là mã tiền tố hợp lệ và falsey nếu không.
Dưới đây là một số trường hợp thử nghiệm thực sự:
["Hello", "World"]
["Code", "Golf", "Is", "Cool"]
["1", "2", "3", "4", "5"]
["This", "test", "case", "is", "true"]
["111", "010", "000", "1101", "1010", "1000", "0111", "0010", "1011",
"0110", "11001", "00110", "10011", "11000", "00111", "10010"]
Dưới đây là một số trường hợp thử nghiệm sai:
["4", "42"]
["1", "2", "3", "34"]
["This", "test", "case", "is", "false", "t"]
["He", "said", "Hello"]
["0", "00", "00001"]
["Duplicate", "Duplicate", "Keys", "Keys"]
Đây là môn đánh gôn, vì vậy các sơ hở tiêu chuẩn được áp dụng và câu trả lời ngắn nhất bằng byte thắng.
001
sẽ được giải mã duy nhất? Nó có thể là 00, 1
hoặc 0, 11
.
0, 00, 1, 11
tất cả là khóa, đây không phải là mã tiền tố vì 0 là tiền tố của 00 và 1 là tiền tố của 11. Mã tiền tố là nơi không có khóa nào bắt đầu bằng khóa khác. Vì vậy, ví dụ, nếu các khóa của bạn 0, 10, 11
là mã tiền tố và có thể giải mã duy nhất. 001
không phải là một tin nhắn hợp lệ, nhưng 0011
hoặc 0010
được giải mã duy nhất.