при условии, что у вас есть словарь, а t (str) означает, что str является допустимым словом или группой слов,
t (str) = sum_over_i (t (str [0, i]) && t (str [i + 1, длина])
то есть, чтобы проверить, образует ли groupofwords действительную группу слов, добавьте пробел после первой буквы и посмотрите, можете ли вы по-прежнему формировать слова с обеими половинами; если это не сработает, попробуйте после второй буквы, затем третье ...
при динамическом программировании это можно сделать за O (n ^ 2) раз!
[Редактировать] Людям не нравится мой ответ. Возможно, какой-то псевдокод.
function IsValidString(x)
if(x is one letter, not 'a' or 'i')
return false
if(x is a dictionary word)
return true
for i from 0 to x.length-2
if( IsValidString(x[0,i]) and IsValidString(x[i+1, x.length-1]) )
return true
return false
Здесь IsValidString возвращает true, если есть способ разбить строку на отдельные, допустимые слова и false в противном случае. Нетрудно понять, как можно отслеживать, какие значения i (размещение пробела) сделали строку действительной.