Implementación de psuedocode, explotando el hecho de que cada parte de la cadena debe ser una palabra, no podemos omitir nada. Avanzamos desde el inicio de la cadena hasta que el primer bit sea una palabra, y luego generamos todas las combinaciones posibles del resto de la cadena. Una vez que hayamos hecho eso, seguiremos adelante hasta que encontremos otras posibilidades para la primera palabra, y así sucesivamente.
allPossibleWords(string s, int startPosition) {
list ret
for i in startPosition..s'length
if isWord(s[startPosition, i])
ret += s[startPostion, i] * allPossibleWords(s, i)
return ret
}
La pesadilla en este código es que usted va a terminar la repetición de cálculos - en su ejemplo, que va a terminar encima de tener que calcular allPossibleWords("carrot")
dos veces - una vez en ["forever", allPossibleWords["carrot"]]
y una vez en ["for", "ever", allPossibleWords["carrot"]]
. Así que memorizar esto es algo a considerar.
Su enfoque de fuerza bruta es correcto. Imagine que le dieron el mismo problema a excepción de la solicitud de palabras en un idioma extranjero. – Apalala