두 개의 문자열 s와 t가 있다고 가정하고 s와 t가 가까운지 여부를 확인해야 합니다. 다음 작업을 사용하여 다른 문자열에서 하나를 얻을 수 있으면 두 문자열이 가깝다고 말할 수 있습니다. -
-
기존 캐릭터 2개를 교환하십시오. (예:abcde에서 aecdb로)
-
하나의 기존 캐릭터가 나타날 때마다 다른 기존 캐릭터로 변경하고 다른 캐릭터에도 동일한 작업을 수행합니다. (예:aacabb -> bbcbaa(여기서 모든 a는 b로 변환되고 그 반대의 경우도 마찬가지입니다))
두 문자열에 대해 원하는 만큼 작업을 사용할 수 있습니다.
따라서 입력이 s ="zxyyyx", t ="xyyzzz"와 같으면 출력은 true가 됩니다. 왜냐하면 3번의 작업으로 s에서 t를 얻을 수 있기 때문입니다. ("zxyyyx" -> "zxxyyy"), ("zxxyyy" -> "yxxzzz") 및 ("yxxzzz" -> "xyyzzz").
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
s와 t에 특이한 문자가 있으면
-
거짓을 반환
-
-
a :=s에 있는 문자의 모든 빈도 값 목록
-
b :=t에 있는 문자의 모든 빈도 값 목록
-
목록 정렬 a
-
목록 정렬 b
-
b와 같지 않으면
-
거짓을 반환
-
-
참을 반환
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
from collections import Counter def solve(s, t): if set(s) != set(t): return False a = list(Counter(s).values()) b = list(Counter(t).values()) a.sort() b.sort() if a != b: return False return True s = "zxyyyx" t = "xyyzzz" print(solve(s, t))
입력
"zxyyyx", "xyyzzz"
출력
True