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:
Below is the implementation of the above approach.
// 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