Skip to content

Commit 779bc2f

Browse files
authored
LPS Algorithm is Added Fixed Issues keon#746 (keon#788)
* Longest Palindromic Subsequence Algorithm is Added * test case added * Renamed
1 parent 5dde6a0 commit 779bc2f

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ If you want to uninstall algorithms, it is as simple as:
194194
- [hashtable](algorithms/map/hashtable.py)
195195
- [separate_chaining_hashtable](algorithms/map/separate_chaining_hashtable.py)
196196
- [longest_common_subsequence](algorithms/map/longest_common_subsequence.py)
197+
- [longest_palindromic_subsequence](algorithms/map/longest_palindromic_subsequence.py)
197198
- [randomized_set](algorithms/map/randomized_set.py)
198199
- [valid_sudoku](algorithms/map/valid_sudoku.py)
199200
- [word_pattern](algorithms/map/word_pattern.py)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
def longest_palindromic_subsequence(str):
2+
n = len(str)
3+
4+
# Create a table to store results of subproblems
5+
L = [[0 for x in range(n)] for x in range(n)]
6+
7+
for i in range(n):
8+
L[i][i] = 1
9+
10+
11+
for sub_string_length in range(2, n + 1):
12+
for i in range(n-sub_string_length + 1):
13+
j = i + sub_string_length-1
14+
if str[i] == str[j] and sub_string_length == 2:
15+
L[i][j] = 2
16+
elif str[i] == str[j]:
17+
L[i][j] = L[i + 1][j-1] + 2
18+
else:
19+
L[i][j] = max(L[i][j-1], L[i + 1][j]);
20+
21+
return L[0][n-1]
22+

tests/test_map.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
Node, SeparateChainingHashTable,
44
word_pattern,
55
is_isomorphic,
6-
is_anagram
6+
is_anagram,
7+
longest_palindromic_subsequence,
78
)
89

910
import unittest
@@ -164,6 +165,18 @@ def test_is_isomorphic(self):
164165
self.assertFalse(is_isomorphic("foo", "bar"))
165166
self.assertTrue(is_isomorphic("paper", "title"))
166167

168+
class TestLongestPalindromicSubsequence(unittest.TestCase):
169+
def test_longest_palindromic_subsequence_is_correct(self):
170+
self.assertEqual(7,longest_palindromic_subsequence('BBABCBCAB'))
171+
self.assertEqual(4,longest_palindromic_subsequence('abbaeae'))
172+
self.assertEqual(8,longest_palindromic_subsequence('babbbababaa'))
173+
self.assertEqual(6,longest_palindromic_subsequence('daccandeeja'))
174+
175+
def test_longest_palindromic_subsequence_is_incorrect(self):
176+
self.assertEqual(4,longest_palindromic_subsequence('BBABCBCAB'))
177+
self.assertEqual(5,longest_palindromic_subsequence('abbaeae'))
178+
self.assertEqual(2,longest_palindromic_subsequence('babbbababaa'))
179+
self.assertEqual(1,longest_palindromic_subsequence('daccandeeja'))
167180

168181
class TestIsAnagram(unittest.TestCase):
169182
def test_is_anagram(self):

0 commit comments

Comments
 (0)