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:YESExplanation:Here 1 2 1 is a palindrome.Input:Arr[] = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]Output:NOExplanation: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)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready. Get hold of all the important mathematical concepts for competitive programming with the **Essential Maths for CP Course** at a student-friendly price.

In case you wish to attend live classes with industry experts, please refer **Geeks Classes Live**