Вы можете использовать trie , чтобы убедиться, что ни одна строка не является префиксом любой другой строки.
Когда вы вставляете в свой файл, вы проверяете оба этих случая:
1) Я прошел старый листовой узел? Если это так, это означает, что другая строка является префиксом моей строки.
2) Хочу ли я отметить уже существующий не лист как лист? Если это так, я префикс другой строки.
Это будет решение O (N), где N - количество строк (измерение количества вставок в три). Каждая вставка выполняется для длины своей строки.
Так что если вы хотите создать хэши отсюда. Вы можете легко пройти через три и затем использовать информацию о том, есть ли у вас префиксный узел или нет, как только вы достигнете нужного листа. Каждый конечный узел представляет целый путь, и он знает, является ли он префиксом другой строки или нет. Если это префикс, то у него есть как минимум 1 дочерний узел.