Triển khai psuedocode, khai thác thực tế là mọi phần của chuỗi cần phải là một từ, chúng tôi không thể bỏ qua bất kỳ thứ gì. Chúng tôi làm việc chuyển tiếp từ đầu chuỗi cho đến khi bit đầu tiên là một từ và sau đó tạo tất cả các kết hợp có thể có của phần còn lại của chuỗi. Một khi chúng tôi đã làm điều đó, chúng tôi tiếp tục đi cho đến khi chúng tôi tìm thấy bất kỳ khả năng khác cho từ đầu tiên, và như vậy.
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
}
Các Bugbear trong mã này là bạn sẽ kết thúc lặp đi lặp lại các phép tính - trong ví dụ của bạn, bạn sẽ kết thúc phải tính toán allPossibleWords("carrot")
hai lần - một lần trong ["forever", allPossibleWords["carrot"]]
và một lần trong ["for", "ever", allPossibleWords["carrot"]]
. Vì vậy, ghi nhớ điều này là một cái gì đó để xem xét.
Nguồn
2011-01-21 03:51:44
Cách tiếp cận bạo lực của bạn là đúng. Hãy tưởng tượng bạn đã được đưa ra cùng một vấn đề ngoại trừ yêu cầu cho các từ trong một ngôn ngữ nước ngoài. – Apalala