# Count of pairs of strings which differ in exactly one position

• Difficulty Level : Medium
• Last Updated : 24 Jul, 2022

Given an array arr[] of strings of equal lengths. The task is to calculate the total number of pairs of strings which differ in exactly one position. Examples:

Input: arr[] = {“abc”, “abd”, “bbd”} Output: 2 (abc, abd) and (abd, bbd) are the only valid pairs. Input: arr[] = {“def”, “deg”, “dmf”, “xef”, “dxg”} Output: 4

Method 1: For every possible pair, check if both the strings differ in exactly a single index position with a single traversal of the strings. Method 2: Two string can be compared in the following way in order to check whether they differ in a single index position:

Let str1 = “abc” and str2 = “adc” For str1, add “#bc”, “a#c” and “ab#” to a set. Now for str2, generate the string in the similar manner and if any of the generated string is already present in the set then both the strings differ in exactly 1 index position. For example, “a#c” is one of the generated strings. Note that “#” is used because it will not be a part of any of the original strings.

Below is the implementation of the above approach:

## C++

 `// CPP implementation of the approach``#include ``using` `namespace` `std;` `// Function to return the count of same pairs``int` `pairCount(map &d)``{``    ``int` `sum = 0;``    ``for` `(``auto` `i : d)``        ``sum += (i.second * (i.second - 1)) / 2;` `    ``return` `sum;``}` `// Function to return total number of strings``// which satisfy required condition``int` `difference(vector &array, ``int` `m)``{``    ``// Dictionary changed will store strings``    ``// with wild cards``    ``// Dictionary same will store strings``    ``// that are equal``    ``map changed, same;` `    ``// Iterating for all strings in the given array``    ``for` `(``auto` `s : array)``    ``{``        ``// If we found the string then increment by 1``        ``// Else it will get default value 0``        ``same[s]++;` `        ``// Iterating on a single string``        ``for` `(``int` `i = 0; i < m; i++)``        ``{``            ``// Adding special symbol to the string``            ``string t = s.substr(0, i) + ``"//"` `+ s.substr(i + 1);` `            ``// Incrementing the string if found``            ``// Else it will get default value 0``            ``changed[t]++;``        ``}``    ``}` `    ``// Return counted pairs - equal pairs``    ``return` `pairCount(changed) - pairCount(same) * m;``}` `// Driver Code``int` `main()``{``    ``int` `n = 3, m = 3;``    ``vector array = {``"abc"``, ``"abd"``, ``"bbd"``};``    ``cout << difference(array, m) << endl;` `    ``return` `0;``}` `// This code is contributed by``// sanjeev2552`

## Python3

 `# Python3 implementation of the approach` `# Function to return the count of same pairs``def` `pair_count(d):``    ``return` `sum``((i``*``(i``-``1``))``/``/``2` `for` `i ``in` `d.values())`  `# Function to return total number of strings``# which satisfy required condition``def` `Difference(array, m):``    ` `    ``# Dictionary changed will store strings``    ``# with wild cards``    ``# Dictionary same will store strings``    ``# that are equal``    ``changed, same ``=` `{}, {}``    ` `    ``# Iterating for all strings in the given array``    ``for` `s ``in` `array:``        ` `        ``# If we found the string then increment by 1``        ``# Else it will get default value 0``        ``same[s]``=` `same.get(s, ``0``)``+``1``        ` `        ``# Iterating on a single string``        ``for` `i ``in` `range``(m):``            ``# Adding special symbol to the string``            ``t ``=` `s[:i]``+``'#'``+``s[i ``+` `1``:]``            ` `            ``# Incrementing the string if found``            ``# Else it will get default value 0``            ``changed[t]``=` `changed.get(t, ``0``)``+``1` `    ``# Return counted pairs - equal pairs``    ``return` `pair_count(changed) ``-` `pair_count(same)``*``m` `# Driver code``if` `__name__``=``=``"__main__"``:``    ``n, m ``=` `3``, ``3``    ``array ``=``[``"abc"``, ``"abd"``, ``"bbd"``]``    ``print``(Difference(array, m))`

## Javascript

 ``

Output:

`2`

Time Complexity : O(n*m)

Space Complexity : O(n+m)

My Personal Notes arrow_drop_up