https://leetcode.com/problems/word-break-ii/#/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. You may assume the dictionary does not contain duplicate words.
Return all such possible sentences.
For example, given
s = "catsanddog"
,
dict = ["cat", "cats", "and", "sand", "dog"]
.
A solution is ["cats and dog", "cat sand dog"]
.
UPDATE (2017/1/4):
The wordDict parameter had been changed to a list of strings (instead of a set of strings). Please reload the code definition to get the latest changes.
public class Solution {
public List<String> wordBreak(String s, List<String> wordDict) {
return DFS(s, wordDict, new HashMap<String, ArrayList<String>>());
// List<String> res = new ArrayList<String>();
// DFS(s, wordDict, res, "");
// return res;
}
private List<String> DFS(String s, List<String> wordDict, HashMap<String, ArrayList<String>> map) {
if (map.containsKey(s))
return map.get(s);
ArrayList<String> res = new ArrayList<String>();
if (s.length() == 0){
res.add("");
return res;
}
for (String subStr : wordDict) {
if (s.startsWith(subStr)) {
for (String str : DFS(s.substring(subStr.length()), wordDict, map)) {
res.add(subStr + (str == "" ? "" : " ")+ str);
}
}
}
map.put(s, res);
return res;
}
}