From 75c109802bf3b6c86606d8c481bbc6c80c4d1da5 Mon Sep 17 00:00:00 2001 From: Jayit Saha <45602643+ricksaha2000@users.noreply.github.com> Date: Thu, 15 Oct 2020 20:05:58 +0530 Subject: [PATCH 1/2] Create LongestPalindromicSubsequence.py --- LongestPalindromicSubsequence.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 LongestPalindromicSubsequence.py diff --git a/LongestPalindromicSubsequence.py b/LongestPalindromicSubsequence.py new file mode 100644 index 0000000..11f0107 --- /dev/null +++ b/LongestPalindromicSubsequence.py @@ -0,0 +1,16 @@ +def longestPalindromeSubseq(self, s: str) -> int: + n = len(s) + dp = [[0]*(n) for _ in range(n) ] + + for i in range(n): + dp[i][i] = 1 + + + for i in range(n-1, -1, -1): + for j in range(i+1, n): + if s[i]==s[j]: + dp[i][j] = dp[i+1][j-1]+2 + else: + dp[i][j] = max(dp[i][j-1], dp[i+1][j]) + + return dp[0][-1] From b8aa0334e747e67d9a8c8320876f81e9ecf98d8c Mon Sep 17 00:00:00 2001 From: Jayit Saha <45602643+ricksaha2000@users.noreply.github.com> Date: Thu, 15 Oct 2020 20:14:03 +0530 Subject: [PATCH 2/2] Create LongestBitonicSequence.py --- LongestBitonicSequence.py | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 LongestBitonicSequence.py diff --git a/LongestBitonicSequence.py b/LongestBitonicSequence.py new file mode 100644 index 0000000..e8503b3 --- /dev/null +++ b/LongestBitonicSequence.py @@ -0,0 +1,41 @@ +answer = [] +def index_ceiling(arr,T, left,right, key): + while (right - left > 1): + mid = left + (right - left) // 2; + if (arr[T[mid]] >= key): + right = mid + else: + left = mid + return right +def long_inc_seq(A): + n = len(A) + tails_idx = [0]*(n) + prev_idx = [-1]*(n) + length = 1 + for i in range(1, n): + if (A[i] < A[tails_idx[0]]): + tails_idx[0] = i + elif (A[i] > A[tails_idx[length - 1]]): + prev_idx[i] = tails_idx[length - 1] + tails_idx[length] = i + length += 1 + else: + pos = index_ceiling(A, tails_idx, -1, length - 1, A[i]) + prev_idx[i] = tails_idx[pos - 1] + tails_idx[pos] = i + i = tails_idx[length - 1] + while(i >= 0): + answer.append(A[i]) + i = prev_idx[i] +def long_bitonic(A,B): + n1 = len(A) + n2 = len(B) + global answer + long_inc_seq(A) + answer = answer[::-1] + B = B[::-1] + long_inc_seq(B) +A = [2, 6, 3, 5, 4, 6] +B = [9, 7, 5, 8, 4, 3] +long_bitonic(A,B) +print(answer)