Skip to content

Commit f1fec69

Browse files
new fixes
1 parent 1a90d45 commit f1fec69

1 file changed

Lines changed: 41 additions & 43 deletions

File tree

dynamic_programming/longest_palindromic_substring.py

Lines changed: 41 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# reference :https://www.geeksforgeeks.org/dsa/longest-palindromic-substring/
22

3-
4-
def longest_palindromic_substring(s: str) -> str:
3+
def longest_palindromic_substring(s:str)->str:
54
"""
6-
This function returns the longest palindromic substring in a string using dynamic programming
5+
This function returns longest palindromic substring in a string using DP
6+
s : input string
77
>>> longest_palindromic_substring("babad")
88
'aba'
99
>>> longest_palindromic_substring("cbbd")
@@ -15,35 +15,34 @@ def longest_palindromic_substring(s: str) -> str:
1515
>>> longest_palindromic_substring("")
1616
''
1717
"""
18-
n = len(s)
18+
n=len(s)
1919

20-
dp = [[False for i in range(n)] for j in range(n)]
21-
start = 0
22-
max_length = 1
20+
dp=[[False for i in range(n)] for j in range(n)]
21+
start=0
22+
max_length=1
2323

2424
for i in range(n):
25-
dp[i][i] = True
26-
25+
dp[i][i]=True
26+
2727
# for length 2 palindrome check
28-
for i in range(n - 1):
29-
if s[i] == s[i + 1]:
30-
dp[i][i + 1] = True
31-
start = i
32-
max_length = 2
28+
for i in range(n-1):
29+
if s[i]==s[i+1]:
30+
dp[i][i+1]=True
31+
start=i
32+
max_length=2
3333

3434
# for length 3 and above
35-
for length in range(3, n + 1):
36-
for i in range(n - length + 1):
37-
j = i + length - 1
38-
if s[i] == s[j] and dp[i + 1][j - 1]:
39-
dp[i][j] = True
40-
start = i
41-
max_length = length
35+
for length in range(3,n+1):
36+
for i in range(n-length+1):
37+
j=i+length-1
38+
if s[i]==s[j] and dp[i+1][j-1]:
39+
dp[i][j]=True
40+
start=i
41+
max_length=length
4242

43-
return s[start : start + max_length]
43+
return s[start:start+max_length]
4444

45-
46-
def manacher_algorithm(s: str) -> str:
45+
def manacher_algorithm(s:str)->str:
4746
"""
4847
This function returns the longest palindromic substring in a string using Manacher's algorithm
4948
>>> longest_palindromic_substring("babad")
@@ -57,28 +56,27 @@ def manacher_algorithm(s: str) -> str:
5756
>>> longest_palindromic_substring("")
5857
''
5958
"""
60-
T = "^#" + "#".join(s) + "#$"
61-
n = len(T)
62-
63-
p = [0] * n
64-
c = 0
65-
r = 0
59+
T='^#'+'#'.join(s)+'#$'
60+
n=len(T)
6661

67-
for i in range(1, n - 1):
68-
mirror = 2 * c - i
69-
if i < r:
70-
p[i] = min(r - i, p[mirror])
71-
while T[i + (1 + p[i])] == T[i - (1 + p[i])]:
72-
p[i] += 1
73-
if i + p[i] > r:
74-
c = i
75-
r = i + p[i]
62+
p=[0]*n
63+
c=0
64+
r=0
7665

77-
max_length = max(p)
78-
max_center = p.index(max_length)
79-
start = (max_center - max_length) // 2
80-
return s[start : start + max_length]
66+
for i in range(1,n-1):
67+
mirror=2*c-i
68+
if i<r:
69+
p[i]=min(r-i,p[mirror])
70+
while T[i+(1+p[i])]==T[i-(1+p[i])]:
71+
p[i]+=1
72+
if i+p[i]>r:
73+
c=i
74+
r=i+p[i]
8175

76+
max_length=max(p)
77+
max_center=p.index(max_length)
78+
start=(max_center-max_length)//2
79+
return s[start:start+max_length]
8280

8381
if __name__ == "__main__":
8482
import doctest

0 commit comments

Comments
 (0)