Suppose we have a string S. We have to find the length of longest palindromic substring in S. We are assuming that the length of the string S is 1000. So if the string is “BABAC”, then the longest palindromic substring is “BAB” and length is 3.
To solve this, we will follow these steps −
Define one square matrix of order same as the length of string, and fill it with False
Set the major diagonal elements as true, so DP[i, i] = True for all i from 0 to order – 1
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
if l = 2, then
if S[i] = S[end - 1], then
DP[i, end - 1] = True, max_len := l, and start := i
otherwise
if S[i] = S[end - 1] and DP[i + 1, end - 2], then
DP[i, end - 1] = True, max_len := l, and start := i
return max_len
Let us see the following implementation to get better understanding −
Example
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'))
Input
"ABBABBC"
Output
5