Можно конечно и свой велосипед придумать, но есть
готовые решения, считаемые легко и довольно удобно. Я обычно использую табличные варианты. Из простых есть еще известный ror13-хеш:
Код:
hash := 0;
for i := 1 to length(str) do
hash := ((hash shl (32-13)) or (hash shr 13)) + str[i];
После чего делаем массив списков, в списке храним все элементы с соответствующим хешом. При поиске берем по индексу список и проверяем все его элементы уже на полное совпадение строки.
При удалении в данном случае достаточно опять же найти нужный элемент и исключить из соответствующего списка.
И вообще,
вот.