Книга Джона Бентли, Programming Pearls , имеет отличный пример того, как это делается для анаграмм, и я уверен, что вы могли бы адаптировать его. См. Код для столбца 2 (или даже лучше захватите книгу!).
Я нарисую здесь реализацию:
1) Пройдите по словарю, для каждого слова сортируйте буквы по порядку (например, рыба стала бы "fihs", "осел" стал бы "dekony". Этот ключ позволит вам найти все слова, которые могут быть сделано из этой серии букв. Сохраните эту информацию в структуре данных Map >. Например, для слова «собака» у вас будет две записи «собака» -> (бог, собака).
3) Теперь, когда вы хотите найти слово, отсортируйте последовательность букв в стойке, как описано выше, и запросите карту (например, найдите ключ на карте, которую вы создали). Это даст вам список всех возможных слов, составленных из этой серии букв.
Вам придется немного адаптировать это для Scrabble, потому что оригинальный алгоритм был для анаграмм, но это должно быть так же просто, как просто запрашивать карту больше раз (например, если у вас есть буквы dayvgea, то вам нужно будет запрашивать не только для aadgeyv, но также для каждой комбинации из 6 букв и ниже. Количество различных комбинаций из 7 элементов составляет всего 128, поэтому для поиска лучшего слова вам понадобится только фиксированное количество поисков в структура данных.