Python 查找回文子串的所有组合

Python 查找回文子串的所有组合,python,python-3.x,combinations,Python,Python 3.x,Combinations,如何在Python中为一些随机输入的字符串找到所有可能的回文子字符串组合?例如,如果输入xxyx则应返回: [['xx', 'y', 'x'], ['x', 'xyx'], ['x', 'x', 'y', 'x']] . 我知道如何获取所有的子字符串并检查它是否是回文的,但找不到一种方法来组合成正确的解决方案,如图所示。对不起,如果问题问错了,这是我的第一个问题 代码如下: def find_all_subsets(seq, n): if n == 0: retur

如何在Python中为一些随机输入的字符串找到所有可能的回文子字符串组合?例如,如果输入xxyx则应返回:

[['xx', 'y', 'x'], ['x', 'xyx'], ['x', 'x', 'y', 'x']] . 
我知道如何获取所有的子字符串并检查它是否是回文的,但找不到一种方法来组合成正确的解决方案,如图所示。对不起,如果问题问错了,这是我的第一个问题

代码如下:

def find_all_subsets(seq, n):

    if n == 0:
        return [[]]

    else:
        result = []
        subsets = find_all_subsets(seq, n-1)

        for subset in subsets:
            result += [subset]

            result += [[seq[n-1]] + subset]

        return result


def check_palindrome(subsetsList):
    finalList = []
    for set in subsetsList:
        if set[::-1] == set:
            finalList.append(set)
        else:
           continue

    return finalList



if __name__ == "__main__":
    word = "xxyx"
    palindromicSubsets = check_palindrome(find_all_subsets(word, len(word)))
    print(palindromicSubsets)

看起来您需要寻找的不是所有回文子字符串,而是所有可以将输入字符串划分为回文子字符串的方法。(至少有一种方法,因为一个字符的子字符串总是回文。)

我是这样做的:

def palindromic_substrings(s):
    if not s:
        return [[]]
    results = []
    for i in range(len(s), 0, -1):
        sub = s[:i]
        if sub == sub[::-1]:
            for rest in palindromic_substrings(s[i:]):
                results.append([sub] + rest)
    return results
有两个循环。外部循环检查初始子字符串的每个长度(按长度降序),以查看它是否是回文。如果是这样,它将在字符串的其余部分递归,并在返回的值上循环,在将初始子字符串添加到结果之前将其添加到每个项

一种稍微更具python风格的方法是制作一个递归生成器:

def palindromic_substrings(s):
    if not s:
        yield []
        return
    for i in range(len(s), 0, -1):
        sub = s[:i]
        if sub == sub[::-1]:
            for rest in palindromic_substrings(s[i:]):
                yield [sub] + rest

第一个问题不错,但是!您应该添加已经尝试过的代码。目前,它太宽泛了,但如果你已经完成了工作,只是忽略了展示,我认为纠正这种疏忽将使它处于良好状态。(哦,请编辑你的问题,这样做。长长的代码片段在注释中的格式非常糟糕。)好吧,到目前为止,我所做的一切只是给了我该字符串中所有可能的回文子字符串,我甚至没有接近于将它们像我应该的那样组合起来。我可以展示代码,但我不确定这是否会让问题变得不那么宽泛。你能解释一下,为什么在你预期的产出中,这个列表会被如此分解吗?我希望回文子字符串的集合是,一个集合,或者一个列表,但是为什么它们在嵌套列表中似乎是任意的。好吧,重要的是找到所有可能的方法将输入字符串划分为回文子字符串,比如Blckknght。没有指定应该/必须实现的方式。感谢您提供的解决方案和很好的解释!