在Python中检查我们是否可以得到一个数字对和任意数量的数字三元组
假设我们有一个数字字符串s。我们必须检查是否有一些安排,我们可以有一对相同字符和剩余的字符串形成任意数量的相同字符的三元组。
所以, 如果输入为s = “21133123”,那么输出将是True,因为有两个2可以形成一个”22″的对和”111″,”333″作为两个三元组。
要解决这个问题,我们会按照以下步骤进行 –
- d: 包含s中每个元素频率的列表
-
对于d中的每个k,执行以下操作:
- d[k] := d[k] – 2
-
如果d[i] mod 3对于d中的所有i都为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