检查Python中一个字符串中字符的频率是否是另一个字符串中相同字符频率的因子或倍数


假设我们有两个字符串s和t,我们必须检查s中字符的出现次数是否是t中字符出现次数的倍数或因子。

因此,如果输入类似于s = "xxyzzw" t = "yyyxxxxzz",则输出为True,因为s中x的频率为2,t中为4;s中y只出现一次,但t中有三个y;s和t中z的个数相同;s中有一个w,但t中没有。

为了解决这个问题,我们将遵循以下步骤:

  • s_freq := 包含s中所有字符及其频率的映射
  • t_freq := 包含t中所有字符及其频率的映射
  • 对于s_freq中的每个字符ch:
    • 如果ch不在t_freq中,则
      • 进行下一次迭代
    • 如果t_freq[ch]可以被s_freq[ch]整除,或者s_freq[ch]可以被t_freq[ch]整除,则
      • 进行下一次迭代
    • 否则,
      • 返回False
  • 返回True

示例

让我们看看下面的实现以更好地理解:

 在线演示

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

更新于:2021年1月18日

161 次浏览

启动你的职业生涯

完成课程获得认证

开始
广告