Существует поток случайных символов, похожих на 'a''b''c''a' ... и так далее. В любой момент времени, когда я запрашиваю, мне нужно получить первый не повторяющийся символ. Например, для ввода «abca» «b» должно быть возвращено, так как a повторяется, а первым не повторяющимся символом является «b».оптимизация реализации структуры данных
Должно быть два метода: один для вставки и один для запроса.
Мое решение состоит в том, чтобы иметь связанный список для хранения входящих символов потока. Пока я получаю следующий символ, я просто сравниваю его со всеми текущими символами, и если он присутствует, я не буду вставлять в конец связанного списка, иначе я вложу его в конец. При таком подходе запрос будет принимать O (1), так как я получу первый элемент в связанном списке, а вставка возьмет O (n), так как мне нужно сравнить от первого элемента до последнего элемента в худшем случае.
Есть ли лучший способ?
Это зависит от того, что вы подразумеваете под улучшенным подходом. Всегда есть компромиссы, например, вы можете хранить ваши входящие символы как в списке, так и в хеш-таблице. Вы используете список для отслеживания порядка символов и хеш-таблицы для проверки того, был ли ранее встречен символ. Вы улучшили свою производительность за счет пространства. Это улучшение в целом? Это зависит от того, что вам нужно. – biziclop