HashMap<String,List<String>> map = new HashMap<String,List<String>>();
public List<String> wordBreak(String s, Set<String> wordDict) {
List<String> res = new ArrayList<String>();
if(s == null || s.length() == 0) {
return res;
}
if(map.containsKey(s)) {
return map.get(s);
}
if(wordDict.contains(s)) {
res.add(s);
}
for(int i = s.length() - 1; i >= 0 ; i--) {
String t = s.substring(i);
if(wordDict.contains(t)) {
String remain = s.substring(0, i);
List<String> temp = wordBreak(remain , wordDict);
if(temp != null) {
for(String word : temp) {
res.add(word + " " + t);
}
}
}
}
map.put(s , res);
return res;
}