주어진 문자열 key와 message는 각각 암호 키와 비밀 메시지를 나타냅니다. message를 해독하는 단계는 다음과 같습니다:
key에서 모든 26개의 소문자 알파벳의 첫 번째 출현을 사용하여 대체 테이블의 순서를 정합니다.
대체 테이블을 일반 영어 알파벳과 정렬합니다.
그런 다음 message의 각 문자는 테이블을 사용하여 대체됩니다.
공백 문자 ' '는 그대로 유지됩니다.
예를 들어, key = "happy boy" (실제 키에는 알파벳의 모든 글자가 최소한 한 번씩 포함됨)이 주어지면 부분 대체 테이블은 다음과 같습니다: ('h' -> 'a', 'a' -> 'b', 'p' -> 'c', 'y' -> 'd', 'b' -> 'e', 'o' -> 'f').
입력: key = "the quick brown fox jumps over the lazy dog", message = "vkbs bs t suepuv"
출력: "this is a secret"
설명: 위의 예시는 대체 테이블을 보여줍니다.
이는 "the quick brown fox jumps over the lazy dog"에서 각 문자의 첫 번째 출현을 취해 얻어집니다.
입력: key = "eljuxhpwnyrdgtqkviszcfmabo", message = "zwx hnfx lqantp mnoeius ycgk vcnjrdb"
출력: "the five boxing wizards jump quickly"
설명: 위의 예시는 대체 테이블을 보여줍니다.
이는 "eljuxhpwnyrdgtqkviszcfmabo"에서 각 문자의 첫 번째 출현을 취해 얻어집니다.
제약 조건
26 <= key.length <= 2000
key는 소문자 영어 알파벳과 공백으로 구성됩니다.
key에는 최소한 한 번씩 알파벳의 모든 글자('a'에서 'z'까지)가 포함됩니다.
1 <= message.length <= 2000
message는 소문자 영어 알파벳과 공백으로 구성됩니다.
class Solution:
def decodeMessage(self, key: str, message: str) -> str:
substitution_table = {}
alphabet = "abcdefghijklmnopqrstuvwxyz"
index = 0
for char in key:
if char not in substitution_table and char != ' ':
substitution_table[char] = alphabet[index]
index += 1
if index >= 26:
break
decoded_message = []
for char in message:
if char == ' ':
decoded_message.append(' ')
else:
decoded_message.append(substitution_table[char])
return ''.join(decoded_message)