Python程序检查是否可以获得一对数字和任意数量的三元组数字


假设我们有一个数字字符串 s。我们必须检查是否有一些排列,我们可以有一对相同的字符,字符串的其余部分形成任意数量的相同字符的三元组。

因此,如果输入类似于 s = "21133123",则输出将为 True,因为有两个 2 可以形成 "22" 作为对,"111"、"333" 作为两个三元组。

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

  • d := 一个包含 s 中存在的每个元素频率的列表

  • 对于 d 中的每个 k,执行以下操作:

    • d[k] := d[k] - 2

    • 如果对于 d 中的所有 i,d[i] 模 3 为 0,则

      • 返回 True

    • d[k] := d[k] + 2

  • 返回 False

示例

让我们看看以下实现以获得更好的理解

from collections import Counter
def solve(s):
   d = Counter(s)
   for k in d:
      d[k] -= 2
      if all(d[i] % 3 == 0 for i in d):
         return True
      d[k] += 2
   return False

s = "21133123"
print(solve(s))

输入

"21133123"

输出

True

更新于: 2021年10月12日

212 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.