Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word.
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"]
.
public class Solution {
public List<String> wordBreak(String s, Set<String> wordDict) {
Map<String, List<String>> cache = new HashMap<>();
return wordBreakHelper(s, wordDict, cache);
}
private List<String> wordBreakHelper(String s, Set<String> wordDict, Map<String, List<String>> cache) {
if(cache.containsKey(s)){
return cache.get(s);
}
List<String> result = new ArrayList<>();
if(s.equals("")) {
return result;
}
for(int i = 1; i <= s.length(); i++) {
String prefix = s.substring(0, i);
if(wordDict.contains(prefix)) {
if( i == s.length()){
result.add(prefix);
}
else {
String subfix = s.substring(i);
List<String> tmp = wordBreakHelper(subfix, wordDict, cache);
for(String tmpResult : tmp) {
String resultString = prefix + " " + tmpResult;
result.add(resultString);
}
}
}
}
cache.put(s, result);
return result;
}
}