Open In App

Check if an array has some palindromic subsequence of length at least 3

Improve
Improve
Like Article
Like
Save
Share
Report

Given is an array Arr of integers. The task is to determine if the array has any subsequence of at least length 3 that is a palindrome.

Examples: 

Input: Arr[] = [1, 2, 1] 
Output: YES
Explanation: Here 1 2 1 is a palindrome.

Input: Arr[] = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
Output: NO
Explanation: Here no subsequence of length at least 3 exists which is a palindrome.

 

Approach: 

  • The idea is to check only for length 3 because if a palindromic subsequence of length greater than 3 exists then there is always a palindromic subsequence of length 3.
  • To find the palindromic subsequence of length 3 we just need to find a pair of equal non-adjacent number. 
     

Below is the implementation of the above approach:
 

C++




// C++ code to check if
// palindromic subsequence of
// length atleast 3 exist or not
#include<bits/stdc++.h>
using namespace std;
 
string SubPalindrome(int n, int arr[])
{
    bool ok = false;
    for (int i = 0; i < n; i++)
    {
        for(int j = i + 2; j < n; j++)
        {
            if(arr[i] == arr[j])
                ok = true;
        }
    }
    if(ok)
        return "YES";
    else
        return "NO";
}
     
 
// Driver code
int main()
{
 
    // Input values to list
    int Arr[] = {1, 2, 2, 3, 2};
     
    // Calculating length of array
    int N = sizeof(Arr)/sizeof(Arr[0]);
     
    cout << SubPalindrome(N, Arr);
}
 
// This code is contributed by Bhupendra_Singh


Java




// Java code to check if
// palindromic subsequence of
// length atleast 3 exist or not
 
import java.util.*;
 
class GFG{
  
static String SubPalindrome(int n, int arr[])
{
    boolean ok = false;
    for (int i = 0; i < n; i++)
    {
        for(int j = i + 2; j < n; j++)
        {
            if(arr[i] == arr[j])
                ok = true;
        }
    }
    if(ok)
        return "YES";
    else
        return "NO";
}
      
  
// Driver code
public static void main(String[] args)
{
  
    // Input values to list
    int Arr[] = {1, 2, 2, 3, 2};
      
    // Calculating length of array
    int N = Arr.length;
      
    System.out.print(SubPalindrome(N, Arr));
}
}
 
// This code contributed by sapnasingh4991


Python3




# Python 3 code to check if
# palindromic subsequence of
# length atleast 3 exist or not
def SubPalindrome (n, arr):
    ok = False
    for i in range(n):
        for j in range(i + 2, n):
            if arr[i] == arr[j]:
                ok = True
    return('YES' if ok else 'NO')
 
# Driver code
 
# Input values to list
Arr = [1, 2, 2, 3, 2]
 
# Calculating length of the array
N = len(arr)
 
print (SubPalindrome(N, Arr))


C#




// C# code to check if
// palindromic subsequence of
// length atleast 3 exist or not
using System;
 
public class GFG{
 
static string SubPalindrome(int n, int []arr)
{
    bool ok = false;
    for(int i = 0; i < n; i++)
    {
        for(int j = i + 2; j < n; j++)
        {
            if(arr[i] == arr[j])
                ok = true;
        }
    }
    if(ok)
        return "YES";
    else
        return "NO";
}
     
// Driver code
static public void Main ()
{
    // Input values to list
    int []Arr = { 1, 2, 2, 3, 2 };
     
    // Calculating length of array
    int N = Arr.Length;
    Console.WriteLine(SubPalindrome(N, Arr));
}
}
 
// This code is contributed by shivanisinghss2110


Javascript




<script>
 
    // Javascript code to check if 
    // palindromic subsequence of
    // length atleast 3 exist or not
     
      function SubPalindrome(n, arr)
    {
        let ok = false;
        for (let i = 0; i < n; i++)
        {
            for(let j = i + 2; j < n; j++)
            
                if(arr[i] == arr[j])
                    ok = true;
            }
        }
        if(ok)
            return "YES";
        else
            return "NO";
    }
     
    // Input values to list
    let Arr = [1, 2, 2, 3, 2];
       
    // Calculating length of array 
    let N = Arr.length;
       
    document.write(SubPalindrome(N, Arr));
 
</script>


Output: 

YES

 

Time Complexity: O(N^2)
Auxiliary Space: O(1)



Last Updated : 19 Sep, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads