Skip to content
Related Articles
Check if all characters of a string can be made equal by increments or decrements
• Last Updated : 13 May, 2021

Given a string S consisting of N lowercase alphabets, the task is to check if it is possible to make all characters of the string S equal by incrementing and decrementing any two characters from the given string by 1. If it is possible to make all the characters the same, then print “Yes”. Otherwise, print “No”.

Incrementing or decrementing any character means that change the characters to its next or previous character in the English alphabet respectively. If the characters are ‘a’ and ‘z’ then they cannot be changed further.

Examples:

Input: S = “beb”
Output: Yes
Explanation:
The characters of the given string S can be made equal by performing the below operations:

• For string “beb” increment ‘b’ by 1 and decrement ‘e’ by 1, then the string becomes “cdb”.
• For string “cdb” decrement ‘d’ by 1 and increment ‘b’ by 1, then the string becomes “ccc”.

Input: S = “geeks”
Output: No

Approach: The given problem can be solved based on the below observations:

• While incrementing and decrementing any character by 1 at the same time, the sum of ASCII values of the string remains the same before and after the operation.
• Let suppose the ASCII value of any character is X. If all the characters are equal then the sum ASCII value of the string is N*X. Hence, it can be said that the sum is divisible by N. Therefore, the initial sum of the ASCII value needs to be divisible by N in order to make all the characters equal.

Follow the below steps to solve this problem:

• Initialize a variable sum, that stores the sum of the ASCII value of the given string.
• Traverse the given string S and for each character S[i] add the value of (S[i] – ‘a’ + 1) to the sum.
• After completing the above steps, if the value of sum is divisible by N then all the characters of the given string can be made equal. Therefore, print “Yes”. Otherwise, print “No”.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ``using` `namespace` `std;` `// Function to check if it is``// possible to make all characters``// of string S same or not``void` `canMakeEqual(string S)``{``    ``// Length of string``    ``int` `N = S.size();` `    ``// Stores the sum of ASCII value``    ``int` `weightOfString = 0;` `    ``// Traverse the string S``    ``for` `(``int` `i = 0; i < N; i++) {` `        ``// Update the weightOfString``        ``weightOfString += S[i] - ``'a'` `+ 1;``    ``}` `    ``// If the sum is divisible by N``    ``// then print "Yes"``    ``if` `(weightOfString % N == 0)``        ``cout << ``"Yes"``;` `    ``// Otherwise print "No"``    ``else``        ``cout << ``"No"``;``}` `// Driver Code``int` `main()``{``    ``string S = ``"beb"``;``    ``canMakeEqual(S);` `    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.io.*;` `class` `GFG {`` ` `// Function to check if it is``// possible to make all characters``// of string S same or not``static` `void` `canMakeEqual(String S){``   ``// Length of string``    ``int` `N = S.length();` `    ``// Stores the sum of ASCII value``    ``int` `weightOfString = ``0``;` `    ``// Traverse the string S``    ``for` `(``int` `i = ``0``; i < N; i++) {` `        ``// Update the weightOfString``        ``weightOfString += S.charAt(i) - ``'a'` `+ ``1``;``    ``}` `    ``// If the sum is divisible by N``    ``// then print "Yes"``    ``if` `(weightOfString % N == ``0``)``        ``System.out.println(``"Yes"``);` `    ``// Otherwise print "No"``    ``else``        ``System.out.println(``"No"``);``}``  ` `  ``// Driver Code``    ``public` `static` `void` `main (String[] args) {``            ``String S = ``"beb"``;``               ``canMakeEqual(S);``    ``}``}` `// This code is contributed by aadityaburujwale`

## Python3

 `# Python3 program for the above approach` `# Function to check if it is``# possible to make all characters``# of string S same or not``def` `canMakeEqual(S):``    ` `    ``# Length of string``    ``N ``=` `len``(S)`` ` `    ``# Stores the sum of ASCII value``    ``weightOfString ``=` `0`` ` `    ``# Traverse the string S``    ``for` `i ``in` `range``(N):`` ` `        ``# Update the weightOfString``        ``weightOfString ``+``=` `ord``(S[i]) ``-` `ord``(``'a'``) ``+` `1``    ` `    ``# If the sum is divisible by N``    ``# then pr "Yes"``    ``if` `(weightOfString ``%` `N ``=``=` `0``):``        ``print``(``"Yes"``)`` ` `    ``# Otherwise pr "No"``    ``else``:``        ``print``(``"No"``)` `# Driver Code``S ``=` `"beb"``canMakeEqual(S)` `# This code is contributed by susmitakundugoaldanga`

## C#

 `// C# program for the above approach``using` `System;` `class` `GFG{`` ` `// Function to check if it is``// possible to make all characters``// of string S same or not``static` `void` `canMakeEqual(String S)``{``    ` `    ``// Length of string``    ``int` `N = S.Length;` `    ``// Stores the sum of ASCII value``    ``int` `weightOfString = 0;` `    ``// Traverse the string S``    ``for``(``int` `i = 0; i < N; i++)``    ``{``        ` `        ``// Update the weightOfString``        ``weightOfString += S[i] - ``'a'` `+ 1;``    ``}` `    ``// If the sum is divisible by N``    ``// then print "Yes"``    ``if` `(weightOfString % N == 0)``        ``Console.WriteLine(``"Yes"``);` `    ``// Otherwise print "No"``    ``else``        ``Console.WriteLine(``"No"``);``}``  ` `// Driver Code``public` `static` `void` `Main(String[] args)``{``    ``String S = ``"beb"``;``    ``canMakeEqual(S);``}``}` `// This code is contributed by shikhasingrajput`

## Javascript

 ``
Output:
`Yes`

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

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

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

My Personal Notes arrow_drop_up