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++
// 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 |
Java
// 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 |
Python3
# 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)) |
C#
// 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 |
Javascript
<script> // Javascript code to check if // palindromic subsequece 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)