Я буду предварять это большим количеством комментариев и меньшим количеством ответов (хотя у меня недостаточно репутации, чтобы комментировать). Я не могу думать о какой-либо структуре данных, которая будет удовлетворять требованиям коробки. Интересно было подумать, и я решил поделиться одним потенциальным решением, которое всплыло в моей голове.
Я набрал часть «той же длины» и подумал, что могу придумать что-нибудь на основе этого. .
Теоретически у нас может быть N (N - длина) отображений char -> set. Когда строки добавляются, он проходит через каждый символ и добавляет строку в соответствующий набор. psuedocode:
firstCharMap[s[0]].insert(s);
secondCharMap[s[1]].insert(s);
thirdCharMap[s[2]].insert(s);
fourthCharMap[s[3]].insert(s);
fifthCharMap[s[4]].insert(s);
sixthCharMap[s[5]].insert(s);
Затем, чтобы определить, какие строки соответствуют шаблону, мы просто сделаем пересечение множеств ex: "-vnl" будет: пересечение множеств: secondCharMap [v], четвертыйCharMap [n ], sixthCharMap [l]
Один крайний случай, который выпадает, - это если я хочу просто получить все строки, так что если это требование - нам также может понадобиться дополнительный набор всех строк.
Это решение кажется неуклюжим, но я думаю, что оно может работать. В зависимости от языка, количества строк и т. Д. c - я не удивлюсь, если он будет работать хуже, чем просто перебирать все строки и проверять предикат.