140. Word Break II
Last updated
Last updated
/**
* Time complexity :
* Space complexity :
*/
class Solution {
public List<String> wordBreak(String s, List<String> wordDict) {
int sLen = s.length();
List<String> result = new ArrayList<>();
if(sLen == 0) return result;
ArrayList<String>[] pos = new ArrayList[sLen+1];
pos[0] = new ArrayList<String>();
for(int i = 0; i < sLen; i++) {
if(pos[i] != null) {
for(int j = i+1; j <= sLen; j++) {
String str = s.substring(i, j);
if(wordDict.contains(str)) {
if(pos[j] == null) {
pos[j] = new ArrayList<String>();
}
pos[j].add(str);
}
}
}
}
if(pos[sLen] == null) return result;
dfs(result, pos, "", sLen);
return result;
}
private void dfs(List<String> result,
ArrayList<String>[] pos,
String currStr,
int i) {
if(i == 0) {
result.add(currStr.trim());
return;
}
for(String word: pos[i]) {
dfs(result, pos, word+" "+currStr, i-word.length());
}
}
}