Python程式:查詢最長迴文子串的長度
假設我們有一個字串 S。我們需要找到 S 中最長迴文子串的長度。我們假設字串 S 的長度為 1000。所以如果字串是“BABAC”,那麼最長迴文子串是“BAB”,長度為 3。
為了解決這個問題,我們將遵循以下步驟:
定義一個與字串長度相同的方陣,並將其全部填充為 False
將主對角線元素設定為 True,因此對於所有從 0 到 order – 1 的 i,DP[i, i] = True
start := 0
for l in range 2 to length of S + 1
for i in range 0 to length of 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] 且 DP[i + 1, end - 2],則
DP[i, end - 1] = True,max_len := l,並且 start := i
返回 max_len
讓我們看看下面的實現以更好地理解:
示例
class Solution(object): def solve(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 max_length ob = Solution() print(ob.solve('BABAC'))
輸入
"ABBABBC"
輸出
5
廣告