Одной из возможностей, которую я опишу не для ОС, является поиск всех возможных слов, составляющих набор букв.
По сути, вы отсекаете первую буквувашей коллекции писем и добавьте ее к текущему слову, которое вы формируете.Если оно создает слово (например, поиск по словарю), добавьте его к текущему предложению.Если вам удастся использовать все буквы в вашей коллекции и составить из них слова, то у вас есть полное предложение.Но вам не нужно останавливаться на достигнутом.Вместо этого вы продолжаете работать, и в конечном итоге вы получите все возможные предложения.
Псевдокод будет выглядеть примерно так:
FindWords(vector<Sentence> sentences, Sentence s, Word w, Letters l)
{
if (l.empty() and w.empty())
add s to sentences;
return;
if (l.empty())
return;
add first letter from l to w;
if w in dictionary
{
add w to s;
FindWords(sentences, s, empty word, l)
remove w from s
}
FindWords(sentences, s, w, l)
put last letter from w back onto l
}
Есть, конечно, ряд оптимизаций, которые выможет выполнить, чтобы сделать это быстро.Например, проверка, является ли слово основой любого слова в словаре.Но это основной подход, который даст вам все возможные предложения.