這是一個面試問題。假設你有一個字符串text
和一個dictionary
(一組字符串)。如何將text
分解爲子字符串,以便在dictionary
中找到每個子字符串。如何將給定的文本分解爲字典中的單詞?
例如,您可以使用/usr/share/dict/words
將"thisisatext"
分解爲["this", "is", "a", "text"]
。
我相信回溯可以解決這個問題(在僞的Java):
void solve(String s, Set<String> dict, List<String> solution) { if (s.length == 0) return for each prefix of s found in dict solve(s without prefix, dict, solution + prefix) } List<String> solution = new List<String>() solve(text, dict, solution)
是否有意義?你會優化在詞典中搜索前綴的步驟嗎?你會推薦什麼樣的數據結構?
糾正我,如果我錯了,但你的解決方案是非多項式。使用trie和DP最多可以解決O(n^2)(實際上是O(k),其中k是字典中最長單詞的長度)。讓我知道你是否需要答案。 – ElKamina 2012-01-09 21:05:46
@ElKamina謝謝。我想聽取DP解決方案 – Michael 2012-01-09 22:38:19