Python 中最长回文子串
pythonserver side programmingprogramming更新于 2025/10/25 11:24:17
假设我们有一个字符串 S。我们必须在 S 中找到最长的回文子串。我们假设字符串 S 的长度为 1000。因此,如果字符串是"BABAC",则最长的回文子串是"BAB"。
为了解决这个问题,我们将遵循以下步骤
- 定义一个与字符串长度相同阶的方阵,并用 False 填充它
- 将主对角线元素设置为 true,因此对于从 0 到阶的所有 i,DP[i, i] = True – 1
- start := 0
- 对于 l,范围为 2 到 S 的长度 + 1
- 对于 i,范围为 0 到 S 的长度 – l + 1
- end := i + l
- 如果 l = 2,则
- 如果 S[i] = S[end - 1],则
- DP[i, end - 1] = True,max_len := l,且 start := i
- 如果 S[i] = S[end - 1],则
- 否则
- 如果 S[i] = S[end - 1] 且 DP[i + 1, end - 2],则
- DP[i, end - 1] = True,max_len := l,且 start := i
- 如果 S[i] = S[end - 1] 且 DP[i + 1, end - 2],则
- 对于 i,范围为 0 到 S 的长度 – l + 1
- 返回从索引 start 到 start + max_len 的子字符串
示例 (Python)
让我们看看下面的实现以便更好地理解 −
class Solution(object):
def longestPalindrome(self, s):
dp = [[False for i in range(len(s))] for i in range(len(s))]
for i in range(len(s)):
dp[i][i] = True
max_length = 1
start = 0
for l in range(2,len(s)+1):
for i in range(len(s)-l+1):
end = i+l
if l==2:
if s[i] == s[end-1]:
dp[i][end-1]=True
max_length = l
start = i
else:
if s[i] == s[end-1] and dp[i+1][end-2]:
dp[i][end-1]=True
max_length = l
start = i
return s[start:start+max_length]
ob1 = Solution()
print(ob1.longestPalindrome("ABBABBC"))
输入
"ABBABBC"
输出
"BBABB"
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

