检查 Python 中是否可以通过移除一个字符使所有字符的频率都相同


假设我们有一个小写字符串 s。我们必须检查删除一个字符后所有字符的频率是否相同。

因此,如果输入类似于 s = "abbc",则输出将为 True,因为我们可以删除一个 b 以获得字符串 "abc",其中每个元素的频率为 1。

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

  • occurrence := 包含 s 中所有字符及其频率的映射
  • 如果 s 中所有字符的出现次数相同,则
    • 返回 True
  • 对于 s 中的每个字符,执行以下操作:
    • occurrence[char] := occurrence[char] - 1
    • 如果 s 中所有字符的出现次数相同,则
      • 返回 True
    • occurrence[char] := occurrence[char] + 1
  • 返回 False

示例

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

 在线演示

from collections import defaultdict
def allSame(occurrence):
   counts = list(occurrence.values())
   return all(element == counts[0] for element in counts)
def solve(s):
   occurrence = defaultdict(int)
   for char in s:
      occurrence[char] += 1
   if allSame(occurrence):
      return True
   for char in s:
      occurrence[char] -= 1
      if allSame(occurrence):
         return True
      occurrence[char] += 1
   return False
s = "abbc"
print(solve(s))

输入

"abbc"

输出

True

更新于: 2021年1月18日

494 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告