Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 한 문자열의 문자 빈도가 다른 문자열의 동일한 문자 빈도의 인수 또는 배수인지 확인하십시오.

<시간/>

두 개의 문자열 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]로 나눌 수 있는 경우
      • 다음 반복으로 이동
    • 그렇지 않으면
      • 거짓을 반환
  • 참 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

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