Split a given string into substrings of length K with equal sum of ASCII values

Given a string str of size N and an integer K, the task is to check if the input string can be partitioned into substrings of size K having a constant sum of ASCII values.

Examples:

Input: str = “abdcbbdba” K = 3
Output: YES
Explanation:
3 length substrings {“and”, “cbb”, “dba”} with sum of their ASCII values equal to 295.

Input: str = “ababcdabas” K = 5
Output : NO
Explanation :
5 length substrings {“ababc”, “dabas”} with sum of their ASCII values equal to 507.

Approach:
Follow the steps below to solve the problem:



  1. Check if N is divisible by K or not. If N is not divisible by K then it is not possible for all substrings to be of length K.
  2. Compute ASCII sum of all substrings of length K. If only a single sum is generated for all substrings, print “YES”.
  3. Otherwise, print “NO”.

Below is the implementation of the above approach :

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to check if a given
// string can be split into substrings
// of size K having an equal sum of
// ASCII values.
#include <bits/stdc++.h>
using namespace std;
  
// Function for checking string
bool check(string str, int K)
{
    // Check if the string can
    // be split into substrings
    // of K length only
    if (str.size() % K == 0) {
        int sum = 0, i;
  
        // Compute the sum of first
        // substring of length K
        for (i = 0; i < K; i++) {
            sum += str[i];
        }
        // Compute the sum of
        // remaining substrings
        for (int j = i; j < str.size();
             j += K) {
            int s_comp = 0;
            for (int p = j; p < j + K;
                 p++)
                s_comp += str[p];
            // Check if sum is equal
            // to that of the first
            // substring
            if (s_comp != sum)
                // Since all sums are not
                // equal, return false
                return false;
        }
        // All sums are equal,
        // Return true
        return true;
    }
    // All substrings cannot
    // be of size K
    return false;
}
// Driver Program
int main()
{
  
    int K = 3;
    string str = "abdcbbdba";
  
    if (check(str, K))
        cout << "YES" << endl;
    else
        cout << "NO" << endl;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to check if a given
// string can be split into substrings
// of size K having an equal sum of
// ASCII values.
class GFG{
  
// Function for checking string
static boolean check(String str, int K)
{
      
    // Check if the string can
    // be split into substrings
    // of K length only
    if (str.length() % K == 0)
    {
        int sum = 0, i;
  
        // Compute the sum of first
        // substring of length K
        for(i = 0; i < K; i++)
        {
           sum += str.charAt(i);
        }
          
        // Compute the sum of
        // remaining substrings
        for(int j = i; j < str.length(); j += K) 
        {
           int s_comp = 0;
           for(int p = j; p < j + K; p++)
              s_comp += str.charAt(p);
                
           // Check if sum is equal
           // to that of the first
           // substring
           if (s_comp != sum)
                 
               // Since all sums are not
               // equal, return false
               return false;
        }
          
        // All sums are equal,
        // Return true
        return true;
    }
      
    // All substrings cannot
    // be of size K
    return false;
}
  
// Driver code
public static void main(String args[])
{
    int K = 3;
    String str = "abdcbbdba";
  
    if (check(str, K))
        System.out.println("Yes");
    else
        System.out.println("No");
}
}
  
// This code is contributed by rock_cool

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to check if a given 
# string can be split into substrings 
# of size K having an equal sum of 
# ASCII values. 
  
# Function for checking string 
def check(str, K): 
  
    # Check if the string can 
    # be split into substrings 
    # of K length only 
    if (len(str) % K == 0): 
        sum = 0
          
        # Compute the sum of first 
        # substring of length K 
        for i in range(K): 
            sum += ord(str[i]); 
          
        # Compute the sum of 
        # remaining substrings 
        for j in range(K, len(str), K): 
            s_comp = 0
            for p in range(j, j + K):
                s_comp += ord( str[p]); 
                  
            # Check if sum is equal 
            # to that of the first 
            # substring 
            if (s_comp != sum):
                  
                # Since all sums are not 
                # equal, return False 
                return False
          
        # All sums are equal, 
        # Return true 
        return True
      
    # All substrings cannot 
    # be of size K 
    return False
  
# Driver code 
K = 3
str = "abdcbbdba"
  
if (check(str, K)):
    print("YES")
else:
    print("NO")
  
# This is code contributed by grand_master

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to check if a given
// string can be split into substrings
// of size K having an equal sum of
// ASCII values.
using System;
class GFG{
  
// Function for checking string
static bool check(string str, int K)
{
      
    // Check if the string can
    // be split into substrings
    // of K length only
    if (str.Length % K == 0)
    {
        int sum = 0, i;
  
        // Compute the sum of first
        // substring of length K
        for(i = 0; i < K; i++)
        {
            sum += str[i];
        }
          
        // Compute the sum of
        // remaining substrings
        for(int j = i; j < str.Length; j += K) 
        {
            int s_comp = 0;
            for(int p = j; p < j + K; p++)
                s_comp += str[p];
                      
            // Check if sum is equal
            // to that of the first
            // substring
            if (s_comp != sum)
                      
                // Since all sums are not
                // equal, return false
                return false;
        }
          
        // All sums are equal,
        // Return true
        return true;
    }
      
    // All substrings cannot
    // be of size K
    return false;
}
  
// Driver code
public static void Main(string []args)
{
    int K = 3;
    string str = "abdcbbdba";
  
    if (check(str, K))
        Console.Write("Yes");
    else
        Console.Write("No");
}
}
  
// This code is contributed by Ritik Bansal

chevron_right


Output:

YES

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

competitive-programming-img




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.