Given an array of strings str[] of length N, consisting of strings of the same length, the task is to find the string which only differs by a single character from all the given strings. If no such string can be generated, print -1. In case of multiple possible answers, print any of them.

Example:

Input:_ str[] = { “abac”, “zdac”, “bdac”} _

Output:_ adac _

Explanation:

The string “adac” differs from all the given strings by a single character.

Input:_ str[] = { “geeks”, “teeds”} _

Output:_ teeks_

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

Approach: Follow the steps below to solve the problem:

  • Set the first string as the answer.
  • Now, replace the first character of the string to all possible characters and check if it differs by a single character from the other strings or not.
  • Repeat this process for all the characters in the first string.
  • If any such string of the required type is found from the above step, print the string.
  • If no such situation arises where replacing a single character of the first string generates a string of the required type, print -1.

Below is the implementation of the above approach.

  • C++
  • Python3

// C++ Program to implement

// the above approach

#include <bits/stdc++.h>

#define ll long long

**using** **namespace** std;

// Function to check if a given string

// differs by a single character from

// all the strings in an array

**bool** check(string ans, vector<string>& s,

**int** n, **int** m)

{

// Traverse over the srings

**for** (``**int** i = 1; i < n; ++i) {

// Stores the count of characters

// differing from the strings

**int** count = 0;

**for** (``**int** j = 0; j < m; ++j) {

**if** (ans[j] != s[i][j])

count++;

}

// If differs by more than one

// character

**if** (count > 1)

**return** **false**``;

}

**return** **true**``;

}

// Function to find the string which only

// differ at one position from the all

// given strings of the array

string findString(vector<string>& s)

{

// Size of the array

**int** n = s.size();

// Length of a string

**int** m = s[0].size();

string ans = s[0];

**int** flag = 0;

**for** (``**int** i = 0; i < m; ++i) {

**for** (``**int** j = 0; j < 26; ++j) {

string x = ans;

// Replace i-th character by all

// possible characters

x[i] = (j + 'a'``);

// Check if it differs by a

// single character from all

// other strings

**if** (check(x, s, n, m)) {

ans = x;

flag = 1;

**break**``;

}

}

// If desired string is obtained

**if** (flag == 1)

**break**``;

}

// Print the answer

**if** (flag == 0)

**return** "-1"``;

**else**

**return** ans;

}

// Driver code

**int** main()

{

vector<string> s = { "geeks"``, "teeds" };

// Function call

cout << findString(s) << endl;

}

Output:

teeks

Time Complexity:_ O(N * M2 * 26)_

Auxiliary Space:_ O(M)_

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.

#arrays #greedy #searching #strings #frequency-counting #permutation and combination

Generate a string which differs by only a single character from all given strings
1.10 GEEK