두 개의 문자열 s와 t가 있다고 가정하면 s에 있는 문자의 출현이 t의 배수인지 인수인지 확인해야 합니다.
따라서 입력이 s ="xxyzzw" t ="yyyxxxxzz"와 같으면 출력은 x in s의 주파수가 2이고 in t가 4이고 in s y가 한 번만 존재하지만 t에서는 True가 됩니다. 3개의 y가 있고 s와 t에 같은 수의 z가 있고 s에는 하나의 w가 있지만 t에는 없습니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- s_freq :=s의 모든 문자와 빈도가 있는 지도
- t_freq :=t의 모든 문자와 해당 빈도가 있는 지도
- s_freq의 각 채널에 대해 다음을 수행합니다.
- ch가 t_freq에 없으면
- 다음 반복으로 이동
- t_freq[ch]가 s_freq[ch]로 나눌 수 있거나 s_freq[ch]가 t_freq[ch]로 나눌 수 있는 경우
- 다음 반복으로 이동
- 그렇지 않으면
- 거짓을 반환
- ch가 t_freq에 없으면
- 참 반환
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
from collections import defaultdict def solve(s, t): s_freq = defaultdict(int) t_freq = defaultdict(int) for i in range(0, len(s)): s_freq[s[i]] += 1 for i in range(0, len(t)): t_freq[t[i]] += 1 for ch in s_freq: if ch not in t_freq: continue if t_freq[ch] % s_freq[ch] == 0 or s_freq[ch] % t_freq[ch] == 0: continue else: return False return True s = "xxyzzw" t = "yyyxxxxzz" print(solve(s, t))
입력
"xxyzzw", "yyyxxxxzz"
출력
True