唯一长度为 3 的回文 python

Unique length-3 palindromes python

我有这个问题,你必须找到所有 长度三个 回文并打印有多少回文。

例如:

aabca

输出:

3
aba
aaa
aca

我已经知道如何使用我在下面的网络上找到的代码来获取数量:

res = 0
unq_str = set(s)
for ch in unq_str:
    st = s.find(ch)
    ed = s.rfind(ch)
    if st<ed:
        res+=len(set(s[st+1:ed]))

return res

但这仅适用于 num

所以我尝试了迭代它并获取列表的概念 长度为三并检查它是否是回文

for x in range(len(input1)):
    if not x < 3:
        Str1 = input1[x-3:x]

但后来我停了下来,因为它不适合任何类型的组合

有什么办法吗?

谢谢

我不是 100% 确定这是正确的,但希望它能让你走上正确的轨道。

import itertools

input = "aabca"
palindromes = set() # use a set to ensure no duplicates

# iterate over all combinates of length 3
for t in itertools.combinations(input, 3):
    # is this a palindrome? If so save
    if t == tuple(reversed(t)):
        palindromes.add(''.join(t))

# output results
print(palindromes)
print(len(palindromes))

可能有一个不生成重复项的 itertools 配方,但我认为它有效。

编辑:使用连接会产生一组字符串而不是字符串字符。

编辑 2:要使其等同于 keithpjolly 的回答:

import itertools

input = "aabca"
palindromes = set() # use a set to ensure no duplicates

# iterate over all combinates of length 3
for a,b,c in itertools.combinations(input, 3):
    # is this a palindrome? If so save
    if a == c:
        palindromes.add(''.join((a,b,c)))


# output results
print(palindromes)
print(len(palindromes))

怎么样:

from itertools import combinations
s = 'aabca'
p = set([''.join([a,b,c]) for a,b,c in combinations(s, 3) if a == c])
print(p)
print(len(p))

输出:

{'aaa', 'aba', 'aca'}
3

编辑 - combinationspermutations 好得多。
编辑 - 忘记了 length.