Skip to content

Commit 7780dba

Browse files
Merge pull request #814 from JayRajM97/master
Python and C++ code for the Longest Palindrome Substring
2 parents eedbd8e + eb31f57 commit 7780dba

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed
+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#include <iostream>
2+
#include <cstring>
3+
4+
using namespace std;
5+
6+
const int MAX = 1010;
7+
8+
int memo[MAX][MAX];
9+
int lps(const string& s, int i, int j)
10+
{
11+
12+
if (i > j)
13+
return 0;
14+
15+
if (memo[i][j] > -1)
16+
return memo[i][j];
17+
18+
if (s[i] == s[j])
19+
{
20+
int equalCharacters = 2 - (i == j);
21+
return memo[i][j] = equalCharacters + lps(s, i + 1, j - 1);
22+
}
23+
return memo[i][j] = max( lps(s, i + 1, j), lps(s, i, j - 1) );
24+
}
25+
26+
int longest_palindrome(const string& s)
27+
{
28+
29+
memset(memo, -1, sizeof memo);
30+
return lps(s, 0, s.length() - 1);
31+
}
32+
33+
int main()
34+
{
35+
36+
cout << longest_palindrome("bbabcbcab") << '\n';
37+
cout << longest_palindrome("abbaab") << '\n';
38+
cout << longest_palindrome("opengenus") << '\n';
39+
40+
return 0;
41+
}
+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
def longest_palindrome(text):
2+
3+
length = len(text)
4+
palindromes_lengths = [1] * length
5+
for fgap in range(1, length):
6+
pre = palindromes_lengths[fgap]
7+
for rgap in reversed(range(0, fgap)):
8+
tmp = palindromes_lengths[rgap]
9+
if text[fgap] == text[rgap]:
10+
if rgap + 1 > fgap - 1:
11+
palindromes_lengths[rgap] = 2
12+
else:
13+
palindromes_lengths[rgap] = 2 + pre
14+
else:
15+
palindromes_lengths[rgap] = max(palindromes_lengths[rgap + 1],
16+
palindromes_lengths[rgap])
17+
pre = tmp
18+
return palindromes_lengths[0]
19+
20+
def main():
21+
print(longest_palindrome('bbabcbcab'))
22+
print(longest_palindrome('abbaab'))
23+
print(longest_palindrome('opengenus'))
24+
25+
if __name__ == '__main__':
26+
main()

0 commit comments

Comments
 (0)