Question

In: Computer Science

4.A palindrome is a nonempty string over some alphabet that reads the same forward and backward....

4.A palindrome is a nonempty string over some alphabet that reads the same forward and backward. Examples of palindromes are all strings of length 1, civic, racecar, abba,…

Give a DP algorithm to find the longest palindrome that is a subsequence of a given input string. What is the running time of your algorithm? (40 points).

•Examples:

•Given the input “character”, your algorithm should return “carac”.

•Given the input “TTATGTGAT”, your algorithm should return “TATGTAT”

Python Code only

Solutions

Expert Solution

To obtain a Dp algorithm lets first derive a recursive solution
we take 2 pointers one at the begining and one for the end, as we know
that for pallindrome, given a String s
if start = 0, end = len(s)-1
while start < end
then s[start]==s[end]
start--, end--

Case 1:
   char at start == char at end
   then we take both the characters as possible candidate for result and we
   proceed to get the ans for string of length start+1 -> end-1
Case 2:
   char at start != char at end
   then the largest palindrominc subsequence may be present at (start -> end-1) or (start+1 -> end)

example :
str = S A C A B S
start = 0, end = 6
as str[start] == str[end] now we check for start+1 -> end-1

start = 1 end = 5
A != B
so first decrement end and check string A C A
then increment start and check string C A B

RECURSIVE CODE:

def recursive(start,end,seq):
   if (start>end): return ""
   if(start == end): return seq[start]
   #case 1
   if(seq[start] == seq[end]):
       return seq[start] + recursive(start+1,end-1,seq) + seq[end]
   #case 2
   else:
       s1 = recursive(start+1,end,seq)
       s2 = recursive(start,end-1,seq)

       if(len(s1)>len(s2)):return s1
       else: return s2

as you can see in this recusrive approach there are many overlapping sub problem
so we correct that using memoization (DP) also called Top Down approach.
we do so by storing intermediate results in a dictionary as a hash so that we dont have to recompute
the already calculated values
we do so by making a dictionary which stores "start end" and corresponding string

DP CODE:


def memoization(start,end,seq,dp):
   if (start>end): return ""
   if(start == end): return seq[start]
   #check in memory
   if(dp.get(f"{start} {end}")):
       return dp[f"{start} {end}"]
   #case 1
   if(seq[start] == seq[end]):
       #store in memory
       dp[f"{start} {end}"] = seq[start] + memoization(start+1,end-1,seq,dp) + seq[end]
       return dp[f"{start} {end}"]
   #case 2
   else:
       s1 = memoization(start+1,end,seq,dp)
       s2 = memoization(start,end-1,seq,dp)
       #store in memory
       if(len(s1)>len(s2)):
           dp[f"{start} {end}"]=s1
           return s1
       else:
           dp[f"{start} {end}"]=s2
           return s2  


s = "character"
print(recursive(0,len(s)-1,s))

dp={}
print(memoization(0,len(s)-1,s,dp))


Related Solutions

A palindrome is a string that reads the same forward and backward, i.e., the letters are...
A palindrome is a string that reads the same forward and backward, i.e., the letters are the same whether you read them from right to left or from left to right.      Examples: radar à is a palindrome Able was I ere I saw Elba à is a palindrome good à not a palindrome Write a java program to read a line of text and tell if the line is a palindrome. Use a stack to read each non-blank character...
Foundation of Computer Science A palindrome is a string that reads the same forward and backward....
Foundation of Computer Science A palindrome is a string that reads the same forward and backward. 1. Describe an algorithm that determines whether a string of n characters is a palindrome. 2. Write its corresponding program using your favorite programming language.
A palindrome is a string that reads the same forward and backward, for example, radar, toot,...
A palindrome is a string that reads the same forward and backward, for example, radar, toot, and madam. Your task is to construct a python algorithm to receive as input a string of characters and check whether it is a palindrome using a stack and a queue. Your ADTs contains the following methods: Queue Queue() – constructor enqueue(e) – enqueue an element dequeue(e) – dequeue an element len() – returns the number of elements in the queue Stack Stack() -...
C++: A palindrome is a string that is the same backward as it is forward. For...
C++: A palindrome is a string that is the same backward as it is forward. For example, “tot” and “otto” are rather short palindromes. Write a program that lets a user enter a string and that passes to a bool function a reference to the string. The function should return true if the string is a palindrome and false otherwise. When you do the judgment, capitalization, spaces, and punctuation should be neglected, that is, “Madam, I’m Adam” should test as...
A palindrome is a word or phrase, which reads the same backward or forward. Write a...
A palindrome is a word or phrase, which reads the same backward or forward. Write a program that prompts the user for a string of characters terminated by a period and determines whether the string (without the period) is a palindrome. IMP: Assume that the input contains only letters and blanks. Assume also that the input is at most 30 characters long. Use an array of characters of size 30 to store the input! Disregard blanks when deciding if the...
In Java A palindrome is a word or sequence of characters which reads the same backward...
In Java A palindrome is a word or sequence of characters which reads the same backward and forward, such as madam, dad, racecar, 5885. In java Write a program that asks user to enter a word and prints if the word is a palindrome or not.
HTML 7.20 A palindrome is a number or a text phrase that reads the same backward...
HTML 7.20 A palindrome is a number or a text phrase that reads the same backward and forward. For example, each of the following five-digit integers is a palindrome: 12321, 55555, 45554 and 11611. Write a script that reads in a five-digit integer and determines whether it’s a palindrome. If the number is not five digits long, display an alert dialog indicating the problem to the user. Allow the user to enter a new value after dismissing the alert dialog....
A palindrome is a word or a phrase that is the same when read both forward and backward.
6.7 LAB: PalindromeA palindrome is a word or a phrase that is the same when read both forward and backward. Examples are: "bob," "sees," or "never odd or even" (ignoring spaces). Write a program whose input is a word or phrase, and that outputs whether the input is a palindrome.Ex: If the input is:bobthe output is:bob is a palindromeEx: If the input is:bobbythe output is:bobby is not a palindromeHint: Start by removing spaces. Then check if a string is equivalent to it's reverse.This is my code:s =...
In C++: This is the problem: [(1)] A palindrome is a string that reads the same...
In C++: This is the problem: [(1)] A palindrome is a string that reads the same forwards as backwards. Using only a fixed number of stacks and queues, the stack and queue ADT functions, and a fixed number of int and char variables, write an algorithm to determine if a string is a palindrome. Assume that the string is read from standard input one character at a time. The algorithm should output true or false as appropriate [(2)] Let Q...
JAVA Palindrome Detector A palindrome is any word, phrase, or sentence that reads the same forward...
JAVA Palindrome Detector A palindrome is any word, phrase, or sentence that reads the same forward or backward. Here are some well-known palindromes: Able was I, ere I saw Elba A man, a plan, a canal, Panama Desserts, I stressed Kayak Write a boolean method that users recursion to determine where a String argument is a palindrome. The method should return true if the argument reads the same forward and backward. Demonstrate the method in a program. Include the following...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT