# 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.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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++

 `// C++ program to check if a given ` `// string can be split into substrings ` `// of size K having an equal sum of ` `// ASCII values. ` `#include ` `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; ` `} `

## Java

 `// 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 `

## Python3

 `# 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 `

## C#

 `// 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 `

Output:

```YES
```

Time Complexity: O (N)
Auxiliary Space: O (1) 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.

Article Tags :
Practice Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.