📌  相关文章
📜  计算二进制字符串的子字符串,以使每个字符属于回文大小大于1的回文(1)

📅  最后修改于: 2023-12-03 15:12:01.310000             🧑  作者: Mango

计算二进制字符串的回文子串

在这个问题中,我们要求的是寻找一个二进制字符串中的所有回文子串,且每个子串至少要有两个字符。

算法思路

我们可以利用中心扩展法来找到这些回文子串。具体来说,对于每个字符,以其向左、向右可以扩展出的回文子串为中心,向外扩展,直到不能扩展为止。这样可以找到所有长度大于1的回文子串。

代码实现

以下是一个Python语言的实现,其中longest_palindrome_substring函数接收一个二进制字符串,返回其中的所有回文子串。

def longest_palindrome_substring(s):
    def expand(i,j):
        while i >= 0 and j < len(s) and s[i] == s[j]:
            i -= 1
            j += 1
        return s[i+1:j]
    
    res = set()
    for i in range(len(s)):
        # 以s[i]为中心的回文子串(奇数长度)
        res.add(s[i])
        res.add(expand(i-1, i+1))

        # 以s[i]和s[i+1]为中心的回文子串(偶数长度)
        if i < len(s)-1 and s[i] == s[i+1]:
            res.add(s[i:i+2])
            res.add(expand(i-1, i+2))
    
    return res
示例
>>> s = "10111011"
>>> longest_palindrome_substring(s)
{'0', '101', '11', '10101'}
总结

通过中心扩展法,我们可以找到给定二进制字符串中所有的回文子串,并且通过函数的返回值,我们可以得到这些回文子串的列表,方便后续的操作。