Как грамотно заменить 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, дальше для каждого слова генерировать все слова, отличающееся на одну букву, пока одно из них не найдётся в словаре. У моего друга такой алгоритм зашёл. Тут надо именно оптимизировать


Ответы (0 шт):