思路
暴力枚举,由于候选答案与 $s_1$ 最多只有一个字母不同,可判断是否需要不同,如果需要枚举让哪一位不同,对于当前位,枚举 $26$ 种可能取值。
时间复杂度 $O(26nm^2)$。
#include <iostream>
#include <vector>
#define endl "\n"
using namespace std;
bool ok(vector<string> &s, string &t) {
for (auto u : s)
for (int i = 0, x = 0; i < t.size(); i++)
if (u[i] != t[i] && ++x == 2)
return false;
return true;
}
void solve() {
int n, m;
cin >> n >> m;
vector<string> s(n);
for (int i = 0; i < n; i++)
cin >> s[i];
string t = s[0];
if (ok(s, t)) {
cout << t << endl;
return;
}
for (int i = 0; i < m; i++) {
char old = t[i];
for (int c = 'a'; c <= 'z'; c++) {
t[i] = c;
if (ok(s, t)) {
cout << t << endl;
return;
}
}
t[i] = old;
}
cout << -1 << endl;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
int t;
cin >> t;
while (t--) solve();
return 0;
}