Как грамотно заменить string на *char
Столкнулся с проблемой. Решал олимпиадную задачу на строки. Вроде бы решил, но валится по времени. Мне подсказали, что нужно использовать массив char, вместо string, т.к. в цикле он будет быстрее обрабатываться. Но у меня не получается, не хватает знаний, помогите пж заменить стринги на массив чаров. Сам алгоритм правильный, но не хватает некоторых оптимизаций. Код:
#include <iostream>
#include "unordered_set"
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, m;
string temp, a = "abcdefghijklmnopqrstuvwxyz";
unordered_set <string> dict;
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> temp;
dict.insert(temp);
}
for (int i = 0; i < m; i++) {
cin >> temp;
if (dict.find(temp) != dict.end()){
cout << temp + '\n';
continue;
}
bool flag = true;
int size = (int)temp.size();
for (int j = 0; j < size && flag; j++){ // Перебор позиций
for (int c = 0; c < 26 && a[c] < temp[j]; c++){ // Перебор букв, меньших текущей в слове
string tp = temp;
tp[j] = a[c];
if (dict.find(tp) != dict.end()){
cout << tp << "\n";
flag = false;
break;
}
}
}
if (!flag) continue;
for (int j = size - 1; j >= 0 && flag; j--){ // Перебор позиций с конца
for (int c = a.find(temp[j]) + 1; c < 26; c++){ // Перебор букв, больших текущей в слове
string tp = temp;
tp[j] = a[c];
if (dict.find(tp) != dict.end()){
cout << tp << "\n";
flag = false;
break;
}
}
}
if (flag){
cout << "?\n";
}
}
}
Сама задача:
UPD1: Также мне подсказали, что быстро менять букву в строке можно, используя хеши, только я не понимаю, как это сделать, т.к. не имею опыта обращения с ними UPD2: Общий алгоритм такой: все слова словаря занести в unordered_set, дальше для каждого слова генерировать все слова, отличающееся на одну букву, пока одно из них не найдётся в словаре. У моего друга такой алгоритм зашёл. Тут надо именно оптимизировать

