# Subarray of length K whose concatenation forms a palindrome

• Difficulty Level : Easy
• Last Updated : 01 Oct, 2021

Given an array arr[], consisting of N integers in the range [0, 9], the task is to find a subarray of length K from which we can generate a number which is a Palindrome Number. If no such subarray exists, print -1.

Note: The elements in the array are in the range of 0 to 10.

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

Examples:

Input: arr[] = {1, 5, 3, 2, 3, 5, 4}, K = 5
Output: 5, 3, 2, 3, 5
Explanation:
Number generated by concatenating all elements of the subarray, i.e. 53235, is a palindrome.

Input: arr[] = {2, 3, 5, 1, 3}, K = 4
Output: -1

Naive Approach: The simplest approach to solve the problem is to generate all subarrays of length K and for each subarray, concatenate all the elements from the subarray and check if the number formed is a Palindrome Number or not.

Time Complexity: O(N3)
Auxiliary Space: O(K)

Efficient Approach: The problem can be solved using the Window-Sliding technique. Follow the steps below to solve the problem:

• Make a palindrome function to check if the given subarray (Window-Sliding) is palindrome or not.
• Iterate over the array, and for each subarray call the palindrome function.
• If found to be true, return the starting index of that subarray, and print the array from starting index to the next k index.
• If no such subarray found which is a palindrome, print -1.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// Function to check if a number``// is Palindrome or not``// here i is the starting index``// and j is the last index of the subarray``bool` `palindrome(vector<``int``> a, ``int` `i, ``int` `j)``{``     ``while``(i arr, ``int` `k)``{``    ``int` `n= ``sizeof``(arr)/``sizeof``(arr);``        ` `    ``// Iterating over subarray of length k``    ``// and checking if that subarray is palindrome``    ``for``(``int` `i=0; i<=n-k; i++){``         ``if``(palindrome(arr, i, i+k-1))``             ``return` `i;``    ``}``      ` `    ``// If no subarray is palindrome``    ``return` `-1;``}` `// Driver Code``int` `main()``{``    ``vector<``int``> arr = { 2, 3, 5, 1, 3 };``    ``int` `k = 4;`` ` `    ``int` `ans = findSubArray(arr, k);`` ` `    ``if` `(ans == -1)`` ` `        ``cout << -1 << ``"\n"``;`` ` `    ``else` `{``        ``for` `(``int` `i = ans; i < ans + k;``             ``i++)``            ``cout << arr[i] << ``" "``;``        ``cout << ``"\n"``;``    ``}``    ``return` `0;``}` `// This code is contributed by Prafulla Shekhar`

## Java

 `// Java program for the above approach``import` `java.io.*;` `class` `GFG``{``  ` `    ``// Function to check if a number``    ``// is Palindrome or not``    ``// here i is the starting index``    ``// and j is the last index of the subarray``    ``public` `static` `boolean` `palindrome(``int``[] a, ``int` `i, ``int` `j)``    ``{``         ``while``(i

## Python3

 `# Python3 program for the above approach` `# Function to check if a number``# is Palindrome or not here i is``# the starting index and j is the``# last index of the subarray``def` `palindrome(a, i, j):``    ` `    ``while``(i < j):``        ` `        ``# If the integer at i is not equal to j``        ``# then the subarray is not palindrome``        ``if` `(a[i] !``=` `a[j]):``            ``return` `False``      ` `        ``# Otherwise``        ``i ``+``=` `1``        ``j ``-``=` `1``    ` `    ``# all a[i] is equal to a[j]``    ``# then the subarray is palindrome``    ``return` `True` `# Function to find a subarray whose``# concatenation forms a palindrome``# and return its starting index   ``def` `findSubArray(arr, k):``    ` `    ``n ``=` `len``(arr)``    ` `    ``# Iterating over subarray of length k``    ``# and checking if that subarray is palindrome  ``    ``for` `i ``in` `range``(n ``-` `k ``+` `1``):``        ``if` `(palindrome(arr, i, i ``+` `k ``-` `1``)):``            ``return` `i``    ` `    ``return` `-``1` `# Driver code   ``arr ``=` `[ ``2``, ``3``, ``5``, ``1``, ``3` `]``k ``=` `4``ans ``=` `findSubArray(arr, k)` `if` `(ans ``=``=` `-``1``):``    ``print``(``-``1``)``else``:``    ``for` `i ``in` `range``(ans,ans ``+` `k):``        ``print``(arr[i], end ``=` `" "``)``        ` `# This code is contributed by avanitrachhadiya2155`

## C#

 `// C# program for the above approach``using` `System;` `class` `GFG{` `// Function to check if a number``// is Palindrome or not here i is``// the starting index and j is the``// last index of the subarray``public` `static` `bool` `palindrome(``int``[] a, ``int` `i,``                              ``int` `j)``{``    ``while` `(i < j)``    ``{``        ` `        ``// If the integer at i is not equal to j``        ``// then the subarray is not palindrome``        ``if` `(a[i] != a[j])``            ``return` `false``;` `        ``// Otherwise``        ``i++;``        ``j--;``    ``}` `    ``// All a[i] is equal to a[j]``    ``// then the subarray is palindrome``    ``return` `true``;``}` `// Function to find a subarray whose``// concatenation forms a palindrome``// and return its starting index``static` `int` `findSubArray(``int``[] arr, ``int` `k)``{``    ``int` `n = arr.Length;``    ` `    ``// Iterating over subarray of length k``    ``// and checking if that subarray is palindrome``    ``for``(``int` `i = 0; i <= n - k; i++)``    ``{``        ``if` `(palindrome(arr, i, i + k - 1))``            ``return` `i;``    ``}` `    ``// If no subarray is palindrome``    ``return` `-1;``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``int``[] arr = { 2, 3, 5, 1, 3 };``    ``int` `k = 4;``    ``int` `ans = findSubArray(arr, k);` `    ``if` `(ans == -1)``        ``Console.Write(-1 + ``"\n"``);``        ` `    ``else``    ``{``        ``for``(``int` `i = ans; i < ans + k; i++)``            ``Console.Write(arr[i] + ``" "``);` `        ``Console.Write(``"\n"``);``    ``}``}``}` `// This code is contributed by aashish1995`

## Javascript

 ``
Output
`-1`

Time Complexity: O(N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up