Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 83 additions & 0 deletions dynamic_programming/longest_palindromic_substring.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# reference :https://www.geeksforgeeks.org/dsa/longest-palindromic-substring/

def longest_palindromic_substring(s:str)->str:
"""
This function returns the longest palindromic substring in a string using dynamic programming

Check failure on line 5 in dynamic_programming/longest_palindromic_substring.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (E501)

dynamic_programming/longest_palindromic_substring.py:5:89: E501 Line too long (97 > 88)
>>> longest_palindromic_substring("babad")
'aba'
>>> longest_palindromic_substring("cbbd")
'bb'
>>> longest_palindromic_substring("a")
'a'
>>> longest_palindromic_substring("ac")
'a'
>>> longest_palindromic_substring("")
''
"""
n=len(s)

dp=[[False for i in range(n)] for j in range(n)]
start=0
max_length=1

for i in range(n):
dp[i][i]=True

Check failure on line 25 in dynamic_programming/longest_palindromic_substring.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (W293)

dynamic_programming/longest_palindromic_substring.py:25:1: W293 Blank line contains whitespace
# for length 2 palindrome check
for i in range(n-1):
if s[i]==s[i+1]:
dp[i][i+1]=True
start=i
max_length=2

# for length 3 and above
for length in range(3,n+1):
for i in range(n-length+1):
j=i+length-1
if s[i]==s[j] and dp[i+1][j-1]:
dp[i][j]=True
start=i
max_length=length

return s[start:start+max_length]

def manacher_algorithm(s:str)->str:
"""
This function returns the longest palindromic substring in a string using Manacher's algorithm

Check failure on line 46 in dynamic_programming/longest_palindromic_substring.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (E501)

dynamic_programming/longest_palindromic_substring.py:46:89: E501 Line too long (98 > 88)
>>> longest_palindromic_substring("babad")
'aba'
>>> longest_palindromic_substring("cbbd")
'bb'
>>> longest_palindromic_substring("a")
'a'
>>> longest_palindromic_substring("ac")
'a'
>>> longest_palindromic_substring("")
''
"""
T='^#'+'#'.join(s)+'#$'

Check failure on line 58 in dynamic_programming/longest_palindromic_substring.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (N806)

dynamic_programming/longest_palindromic_substring.py:58:5: N806 Variable `T` in function should be lowercase
n=len(T)

p=[0]*n
c=0
r=0

for i in range(1,n-1):
mirror=2*c-i
if i<r:
p[i]=min(r-i,p[mirror])
while T[i+(1+p[i])]==T[i-(1+p[i])]:
p[i]+=1
if i+p[i]>r:
c=i
r=i+p[i]

max_length=max(p)
max_center=p.index(max_length)
start=(max_center-max_length)//2
return s[start:start+max_length]

if __name__ == "__main__":
import doctest

doctest.testmod()
Loading