# Count pairs of characters in a string whose ASCII value difference is K

Given a string str of lower case alphabets and a non-negative integer K. The task is to find the number of pairs of characters in the given string whose ASCII value difference is exactly K.

Examples:

Input: str = “abcdab”, K = 0
Output: 2
(a, a) and (b, b) are the only valid pairs.

Input: str = “geeksforgeeks”, K = 1
Output: 8
(e, f), (e, f), (f, e), (f, e), (g, f),
(f, g), (s, r) and (r, s) are the valid pairs.

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

Approach: Store the frequency of each character in an array. Traverse through this frequency array to get the required answer. There exist two cases:

1. If K = 0 then check if the similar character appears more than once i.e. if freq[i] > 1. If yes then add (freq[i] * (freq[i] – 1)) / 2 to the count.
2. If K != 0 then check if there exist two characters with ASCII value difference as K say freq[i] and freq[j]. Then add freq[i] * freq[j] to the count.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach ` `#include ` `using` `namespace` `std; ` `#define MAX 26 ` ` `  `// Function to return the count of ` `// required pairs of characters ` `int` `countPairs(string str, ``int` `k) ` `{ ` ` `  `    ``// Length of the string ` `    ``int` `n = str.size(); ` ` `  `    ``// To store the frequency ` `    ``// of each character ` `    ``int` `freq[MAX]; ` `    ``memset``(freq, 0, ``sizeof` `freq); ` ` `  `    ``// Update the frequency ` `    ``// of each character ` `    ``for` `(``int` `i = 0; i < n; i++) ` `        ``freq[str[i] - ``'a'``]++; ` ` `  `    ``// To store the required ` `    ``// count of pairs ` `    ``int` `cnt = 0; ` ` `  `    ``// If ascii value difference is zero ` `    ``if` `(k == 0) { ` ` `  `        ``// If there exists similar characters ` `        ``// more than once ` `        ``for` `(``int` `i = 0; i < MAX; i++) ` `            ``if` `(freq[i] > 1) ` `                ``cnt += ((freq[i] * (freq[i] - 1)) / 2); ` `    ``} ` `    ``else` `{ ` ` `  `        ``// If there exits characters with ` `        ``// ASCII value difference as k ` `        ``for` `(``int` `i = 0; i < MAX; i++) ` `            ``if` `(freq[i] > 0 && i + k < MAX && freq[i + k] > 0) ` `                ``cnt += (freq[i] * freq[i + k]); ` `        ``; ` `    ``} ` ` `  `    ``// Return the required count ` `    ``return` `cnt; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``string str = ``"abcdab"``; ` `    ``int` `k = 0; ` ` `  `    ``cout << countPairs(str, k); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of the approach ` `import` `java.util.Arrays; ` ` `  `class` `GFG  ` `{ ` ` `  `    ``static` `int` `MAX = ``26``; ` ` `  `    ``// Function to return the count of ` `    ``// required pairs of characters ` `    ``static` `int` `countPairs(``char``[] str, ``int` `k)  ` `    ``{ ` ` `  `        ``// Length of the string ` `        ``int` `n = str.length; ` ` `  `        ``// To store the frequency ` `        ``// of each character ` `        ``int``[] freq = ``new` `int``[MAX]; ` ` `  `        ``// Update the frequency ` `        ``// of each character ` `        ``for` `(``int` `i = ``0``; i < n; i++)  ` `        ``{ ` `            ``freq[str[i] - ``'a'``]++; ` `        ``} ` ` `  `        ``// To store the required ` `        ``// count of pairs ` `        ``int` `cnt = ``0``; ` ` `  `        ``// If ascii value difference is zero ` `        ``if` `(k == ``0``) ` `        ``{ ` ` `  `            ``// If there exists similar characters ` `            ``// more than once ` `            ``for` `(``int` `i = ``0``; i < MAX; i++) ` `            ``{ ` `                ``if` `(freq[i] > ``1``)  ` `                ``{ ` `                    ``cnt += ((freq[i] * (freq[i] - ``1``)) / ``2``); ` `                ``} ` `            ``} ` `        ``}  ` `        ``else` `        ``{ ` ` `  `            ``// If there exits characters with ` `            ``// ASCII value difference as k ` `            ``for` `(``int` `i = ``0``; i < MAX; i++) ` `            ``{ ` `                ``if` `(freq[i] > ``0` `&& i + k < MAX && freq[i + k] > ``0``) ` `                ``{ ` `                    ``cnt += (freq[i] * freq[i + k]); ` `                ``} ` `            ``} ` `            ``; ` `        ``} ` ` `  `        ``// Return the required count ` `        ``return` `cnt; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args)  ` `    ``{ ` `        ``String str = ``"abcdab"``; ` `        ``int` `k = ``0``; ` ` `  `        ``System.out.println(countPairs(str.toCharArray(), k)); ` `    ``} ` `} ` ` `  `/* This code contributed by PrinciRaj1992 */`

## Python3

 `# Python3 implementation of the approach  ` `MAX` `=` `26` ` `  `# Function to return the count of  ` `# required pairs of characters  ` `def` `countPairs(string, k) :  ` ` `  `    ``# Length of the string  ` `    ``n ``=` `len``(string);  ` ` `  `    ``# To store the frequency  ` `    ``# of each character  ` `    ``freq ``=` `[``0``] ``*` `MAX``;  ` ` `  `    ``# Update the frequency  ` `    ``# of each character  ` `    ``for` `i ``in` `range``(n) :  ` `        ``freq[``ord``(string[i]) ``-`  `             ``ord``(``'a'``)] ``+``=` `1``;  ` ` `  `    ``# To store the required  ` `    ``# count of pairs  ` `    ``cnt ``=` `0``;  ` ` `  `    ``# If ascii value difference is zero  ` `    ``if` `(k ``=``=` `0``) : ` ` `  `        ``# If there exists similar characters  ` `        ``# more than once  ` `        ``for` `i ``in` `range``(``MAX``) : ` `            ``if` `(freq[i] > ``1``) : ` `                ``cnt ``+``=` `((freq[i] ``*`  `                        ``(freq[i] ``-` `1``)) ``/``/` `2``);  ` `     `  `    ``else` `: ` ` `  `        ``# If there exits characters with  ` `        ``# ASCII value difference as k  ` `        ``for` `i ``in` `range``(``MAX``) : ` `            ``if` `(freq[i] > ``0` `and`  `                ``i ``+` `k < ``MAX` `and`  `                ``freq[i ``+` `k] > ``0``) : ` `                ``cnt ``+``=` `(freq[i] ``*` `freq[i ``+` `k]);  ` ` `  `    ``# Return the required count  ` `    ``return` `cnt;  ` ` `  `# Driver code  ` `if` `__name__ ``=``=` `"__main__"` `:  ` ` `  `    ``string ``=` `"abcdab"``;  ` `    ``k ``=` `0``;  ` ` `  `    ``print``(countPairs(string, k));  ` `     `  `# This code is contributed by AnkitRai01 `

## C#

 `// C# implementation of the approach ` `using` `System; ` `     `  `class` `GFG  ` `{ ` ` `  `    ``static` `int` `MAX = 26; ` ` `  `    ``// Function to return the count of ` `    ``// required pairs of characters ` `    ``static` `int` `countPairs(``char``[] str, ``int` `k)  ` `    ``{ ` ` `  `        ``// Length of the string ` `        ``int` `n = str.Length; ` ` `  `        ``// To store the frequency ` `        ``// of each character ` `        ``int``[] freq = ``new` `int``[MAX]; ` ` `  `        ``// Update the frequency ` `        ``// of each character ` `        ``for` `(``int` `i = 0; i < n; i++)  ` `        ``{ ` `            ``freq[str[i] - ``'a'``]++; ` `        ``} ` ` `  `        ``// To store the required ` `        ``// count of pairs ` `        ``int` `cnt = 0; ` ` `  `        ``// If ascii value difference is zero ` `        ``if` `(k == 0) ` `        ``{ ` ` `  `            ``// If there exists similar characters ` `            ``// more than once ` `            ``for` `(``int` `i = 0; i < MAX; i++) ` `            ``{ ` `                ``if` `(freq[i] > 1)  ` `                ``{ ` `                    ``cnt += ((freq[i] * (freq[i] - 1)) / 2); ` `                ``} ` `            ``} ` `        ``}  ` `        ``else` `        ``{ ` ` `  `            ``// If there exits characters with ` `            ``// ASCII value difference as k ` `            ``for` `(``int` `i = 0; i < MAX; i++) ` `            ``{ ` `                ``if` `(freq[i] > 0 && i + k < MAX && freq[i + k] > 0) ` `                ``{ ` `                    ``cnt += (freq[i] * freq[i + k]); ` `                ``} ` `            ``} ` `            ``; ` `        ``} ` ` `  `        ``// Return the required count ` `        ``return` `cnt; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `Main(String[] args)  ` `    ``{ ` `        ``String str = ``"abcdab"``; ` `        ``int` `k = 0; ` ` `  `        ``Console.WriteLine(countPairs(str.ToCharArray(), k)); ` `    ``} ` `} ` ` `  `// This code has been contributed by 29AjayKumar `

Output:

```2
```

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.

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.