Open In App

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

Last Updated : 19 Sep, 2022
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)



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads