*Maximum Length Palindromic Sub-Sequence of an Array.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了*Maximum Length Palindromic Sub-Sequence of an Array.相关的知识,希望对你有一定的参考价值。

 

/* Write a function to compute the maximum length palindromic sub-sequence of an array. 
A palindrome is a sequence which is equal to its reverse. 
A sub-sequence of an array is a sequence which can be constructed by removing elements of the array. 
Ex: Given [4,1,2,3,4,5,6,5,4,3,4,4,4,4,4,4,4] should return 10 (all 4‘s) */ 
class Interview { 
public static int maxLengthPalindrome(int[] values) { 
//ur implementation here 
}

 

解法一:

Implemtation is recursive, and it‘s much worse than O(n^2). Should use recursive with memorization, then can improve to O(n^2).
However, recursive memorization doesn‘t improve over bottom-up and it has costly overhead. Bottom-up is better in this problem.

public class Solution {
    public static void main(String[] args) {    
        int arr[] = new int[] {4,1,2,3,4,5,6,5,4,3,4,4,4,4,4,4,4};    
        System.out.println(maxLengthPalindrome(arr, 0, arr.length-1));
    }

    public static int maxLengthPalindrome(int[] values, int i, int j) {
        //check if indexes cross each other
        //return 1 if index overlap for else condition below
        //return 0 if index i<j for condition if below
        if(j<=i) return j-i+1;
        if(values[i]==values[j]) return 2 + maxLengthPalindrome(values, i+1, j-1);
        else return Math.max(maxLengthPalindrome(values, i+1, j), maxLengthPalindrome(values, i, j-1));        
    }
}

 

解法二:

The code with the memoization technique which produces O(n^2) complexity is

public int dpLps(int[] a, int i, int j, Integer[][] lps) {
        if (i > j)
            return 0;
        if (lps[i][j] == null) {
            if (i == j)
                lps[i][j] = 1;
            else {
                if (a[i] == a[j])
                    lps[i][j] = 2 + dpLps(a, i + 1, j - 1, lps);
                else
                    lps[i][j] = Math.max(dpLps(a, i + 1, j, lps),
                            dpLps(a, i, j - 1, lps));
            }
        }
        return lps[i][j];
    }

you have to call the function as,

dpLps(a, 0, a.length - 1,new Integer[a.length][a.length])

 

以上是关于*Maximum Length Palindromic Sub-Sequence of an Array.的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 718. Maximum Length of Repeated Subarray

hadoop Requested data length 86483783 is longer than maximum configured RPC length

646. Maximum Length of Pair Chain

646. Maximum Length of Pair Chain

*Maximum Length Palindromic Sub-Sequence of an Array.

646. Maximum Length of Pair Chain