두 개의 소문자 문자열 s가 있고 t는 s가 t에 매핑될 수 있도록 s의 각 문자에 대해 다른 문자(동일한 문자일 수 있음)에 대한 하나의 1:1 매핑을 생성할 수 있는지 확인해야 한다고 가정합니다. (캐릭터의 순서는 변경되지 않습니다.)
따라서 입력이 s ="papa", t ="lili"와 같으면 "p"에서 "l", "a" -> "i"로 매핑을 생성할 수 있으므로 출력은 True가 됩니다. /P>
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- s_dict :=새 지도
- t_dict :=새 지도
- 0에서 s 크기 및 t 크기의 최소 범위에 있는 i에 대해 다음을 수행합니다.
- s[i]가 s_dict에 있으면
- s_dict[s[i]]가 t[i]와 같지 않으면
- 거짓을 반환
- s_dict[s[i]]가 t[i]와 같지 않으면
- 그렇지 않으면 t[i]가 t_dict에 있으면
- t_dict[t[i]]가 s[i]와 같지 않으면
- 거짓을 반환
- t_dict[t[i]]가 s[i]와 같지 않으면
- 그렇지 않으면
- s_dict[s[i]] :=t[i]
- t_dict[t[i]] :=s[i]
- s[i]가 s_dict에 있으면
- 참 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예
class Solution: def solve(self, s, t): s_dict = {} t_dict = {} for i in range(min(len(s), len(t))): if s[i] in s_dict: if s_dict[s[i]] != t[i]: return False elif t[i] in t_dict: if t_dict[t[i]] != s[i]: return False else: s_dict[s[i]] = t[i] t_dict[t[i]] = s[i] return True ob = Solution() print(ob.solve("papa", "lili"))
입력
"papa", "lili"
출력
True