Check if sum of any subarray is Palindrome or not

Given an array arr[] of size N. the task is to check whether there exists any subarray of size atleast 2 such that its sum is palindrome. If such a subarray exists, then print YES. Otherwise, print NO.

Examples:

Input: arr[] = {10, 6, 7, 9, 12}
Output: Yes
Explanation:
The subarray [6, 7, 9] with sum 22 is palindrome.

Input: arr[] = {15, 4, 8, 2}
Output: No
Explanation:
No such subarray exists.

Approach:
To solve the problem follow the steps below:



  • Create a prefix sum array of the given array.
  • Iterate over the array using nested for loops to denote start and end of subarrays. The sum of the subarray within the indices [x, y] can be obtained by pref[y] – pref[x – 1].
  • Check if this sum is Palindrome or not. If any of the sum if palindrome print “Yes”, otherwise print “No”.

Below is the implementation of above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to check if sum of any
// subarray of size atleast 2 is
// palindrome or not
  
#include <bits/stdc++.h>
using namespace std;
  
// Function which checks whether
// a given number is palindrome or not
bool checkPalindrome(int n)
{
    // Store the reverse of
    // the number n
    int rev = 0;
    for (int x = n; x != 0; x /= 10) {
        int d = x % 10;
        rev = rev * 10 + d;
    }
    if (rev == n)
        return true;
  
    else
        return false;
}
  
// Function which checks if the
// requires subarray exists or not
void findSubarray(int ar[], int n)
{
    // Making a prefix sum array of ar[]
    int pref[n];
    pref[0] = ar[0];
  
    for (int x = 1; x < n; x++)
        pref[x] = pref[x - 1] + ar[x];
  
    // Boolean variable that will store
    // whether such subarray exists or not
    bool found = false;
    for (int x = 0; x < n; x++) {
        for (int y = x + 1; y < n; y++) {
            // sum stores the sum of subarray
            // from index x to y of array
            int sum = pref[y];
            if (x > 0) {
                sum -= pref[x - 1];
            }
            if (checkPalindrome(sum)) {
                // Required subarray is found
                found = true;
                break;
            }
        }
  
        if (found)
            break;
    }
    if (found)
        cout << "Yes" << endl;
  
    else
        cout << "No" << endl;
}
  
// Driver code
int main()
{
    int ar[] = { 1, 11, 20, 35 };
  
    int n = sizeof(ar) / sizeof(ar[0]);
  
    findSubarray(ar, n);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to check if sum of any 
// subarray of size atleast 2 is 
// palindrome or not 
class GFG{
      
// Function which checks whether 
// a given number is palindrome or not 
static boolean checkPalindrome(int n) 
      
    // Store the reverse of 
    // the number n 
    int rev = 0
    for(int x = n; x != 0; x /= 10
    
       int d = x % 10
       rev = rev * 10 + d; 
    
    if (rev == n) 
        return true
    else
        return false
      
// Function which checks if the 
// requires subarray exists or not 
static void findSubarray(int []ar, int n) 
      
    // Making a prefix sum array of ar[] 
    int []pref = new int[n]; 
    pref[0] = ar[0]; 
      
    for(int x = 1; x < n; x++) 
    pref[x] = pref[x - 1] + ar[x]; 
      
    // Boolean variable that will store 
    // whether such subarray exists or not 
    boolean found = false
      
    for(int x = 0; x < n; x++) 
    
       for(int y = x + 1; y < n; y++) 
       
         
          // sum stores the sum of subarray 
          // from index x to y of array 
          int sum = pref[y]; 
          if (x > 0
          
              sum -= pref[x - 1]; 
          
          if (checkPalindrome(sum)) 
          
                
              // Required subarray is found 
              found = true
              break
          
       
       if (found) 
           break
    
    if (found) 
        System.out.println("Yes"); 
    else
        System.out.println("No"); 
      
// Driver code 
public static void main(String args[]) 
    int []ar = { 1, 11, 20, 35 }; 
    int n = ar.length; 
      
    findSubarray(ar, n); 
  
// This code is contributed by AnkitRai01

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to check if sum of 
# any subarray of size atleast 2 is
# palindrome or not
  
# Function which checks whether a 
# given number is palindrome or not
def checkPalindrome(n):
      
    # Store the reverse 
    # of the number n
    rev = 0
    x = n
      
    while(x != 0):
        d = x % 10
        rev = rev * 10 + d
        x = x // 10
      
    if (rev == n):
        return True
    else:
        return False
  
# Function which checks if the
# requires subarray exists or not
def findSubarray(ar, n):
      
    # Making a prefix sum array of ar[]
    pref = [0 for i in range(n)]
    pref[0] = ar[0]
  
    for x in range(1, n):
        pref[x] = pref[x - 1] + ar[x]
  
    # Boolean variable that will store
    # whether such subarray exists or not
    found = False
      
    for x in range(n):
        for y in range(x + 1, n, 1):
              
            # Sum stores the sum of subarray
            # from index x to y of array
            sum = pref[y]
            if (x > 0):
                sum -= pref[x - 1]
  
            if (checkPalindrome(sum)):
                  
                # Required subarray is found
                found = True
                break
  
        if (found):
            break
    if (found):
        print("Yes")
    else:
        print("No")
  
# Driver code
if __name__ == '__main__':
      
    ar = [ 1, 11, 20, 35 ]
    n = len(ar)
      
    findSubarray(ar, n)
  
# This code is contributed by Surendra_Gangwar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to check if sum of any
// subarray of size atleast 2 is
// palindrome or not
using System;
  
class GFG{
  
// Function which checks whether
// a given number is palindrome or not
static bool checkPalindrome(int n)
{
    // Store the reverse of
    // the number n
    int rev = 0;
    for(int x = n; x != 0; x /= 10) 
    {
       int d = x % 10;
       rev = rev * 10 + d;
    }
    if (rev == n)
        return true;
    else
        return false;
}
  
// Function which checks if the
// requires subarray exists or not
static void findSubarray(int []ar, int n)
{
    // Making a prefix sum array of ar[]
    int []pref = new int[n];
    pref[0] = ar[0];
  
    for(int x = 1; x < n; x++)
       pref[x] = pref[x - 1] + ar[x];
  
    // Boolean variable that will store
    // whether such subarray exists or not
    bool found = false;
    for(int x = 0; x < n; x++)
    {
       for(int y = x + 1; y < n; y++) 
       {
          // sum stores the sum of subarray
          // from index x to y of array
          int sum = pref[y];
          if (x > 0) 
          {
              sum -= pref[x - 1];
          }
          if (checkPalindrome(sum))
          {
                
              // Required subarray is found
              found = true;
              break;
          }
       }
       if (found)
           break;
    }
    if (found)
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No");
}
  
// Driver code
public static void Main()
{
    int []ar = { 1, 11, 20, 35 };
    int n = ar.Length;
  
    findSubarray(ar, n);
}
}
  
// This code is contributed by Code_Mech

chevron_right


Output:

Yes

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

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.