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)