📅  最后修改于: 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'}
通过中心扩展法,我们可以找到给定二进制字符串中所有的回文子串,并且通过函数的返回值,我们可以得到这些回文子串的列表,方便后续的操作。