Сопоставление частичной строки с полными строками из массива строк

Это небольшая часть вопроса, который мне однажды задали. У меня есть переменный массив строк, например

список строк []={abcd,xyzw,qwer,abcde}

И мой ввод:

список ввода[]={ab,abc,q,z,x}

Вывод должен быть []={abcd,abcd,qwer,-,xyzw}

Каждая входная строка должна соответствовать одним и тем же символам (с начала) в списке. Он должен дать первую доступную строку в качестве ответа.

Рабочий подход, о котором я мог думать, был: -

  1. Перебор: временная сложность O((количество строк в списке)*(средняя длина входных строк)*(количество входных строк))

  2. Хэширование: это тоже занимает столько же времени.

Есть лучший способ сделать это?


person fedonso    schedule 03.05.2012    source источник
comment
По крайней мере, если я правильно понимаю ваше намерение, попытка должна быть почти идеальной.   -  person Jerry Coffin    schedule 03.05.2012
comment
Пожалуйста, уточните лучше. Каков ваш компромисс между временем и памятью? В чем причина того, что грубая сила не годится?   -  person std''OrgnlDave    schedule 03.05.2012
comment
Ну, я в основном должен уменьшить временную сложность здесь. Компромисс пространства приемлем. Грубая сила работает нормально, но превышает предполагаемый лимит времени.   -  person fedonso    schedule 03.05.2012


Ответы (1)


если ваш список [] исправлен (или не очень сильно изменился), попытка поможет. При вставке вам нужно выполнить некоторую логику, чтобы определить «первое совпадение», поэтому, если «abcd» является первым, вы не должны вставлять «abcde» (или делать его недействительным, если «abcd» можно отбросить, поэтому вы нужно немного вести учет и бухгалтерию).

подробности: http://en.wikipedia.org/wiki/Trie

person Peter Miehle    schedule 03.05.2012
comment
Список является переменным. Он также рассматривается отдельно в другом разделе программы. Я прочитаю о Трие и посмотрю, может ли это помочь. - person fedonso; 03.05.2012