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

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ code to check if 
// palindromic subsequece 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

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java code to check if 
// palindromic subsequece 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 code to check if 
# palindromic subsequece 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))

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# code to check if 
// palindromic subsequece 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

chevron_right


Output:

YES

Time Complexity:O(N^2)

competitive-programming-img




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.