Description:
Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, add spaces in s to construct a sentence where each word is a valid dictionary word. Return all such possible sentences.
Note:
The same word in the dictionary may be reused multiple times in the segmentation.
You may assume the dictionary does not contain duplicate words.
Example 1:
Input:
s = “catsanddog”
wordDict = [“cat”, “cats”, “and”, “sand”, “dog”]
Output:
[
“cats and dog”,
“cat sand dog”
]
Solution:
使用DFS,由于是深度优先,所以可以采用记忆过程节省时间,代码如下:
public List<String> wordBreak(String s, List<String> wordDict) {
return DFS(s, wordDict, new HashMap<String, List<String>>());
}
List<String> DFS(String s, List<String> wordDict, HashMap<String, List<String>> map) {
if(map.containsKey(s)) return map.get(s);
List<String> re = new LinkedList<>();
if(s.length() == 0){
re.add("");
return re;
}
for(String word : wordDict){
if(s.startsWith(word)){
List<String> sublist = DFS(s.substring(word.length()), wordDict, map);
for(String sub : sublist){
re.add(sub == "" ? word: word + " " + sub);
}
}
}
map.put(s, re);
return re;
}