g0101_0200.s0140_word_break_ii.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java Show documentation
Show all versions of leetcode-in-java Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0101_0200.s0140_word_break_ii;
// #Hard #Top_Interview_Questions #String #Hash_Table #Dynamic_Programming #Backtracking #Trie
// #Memoization #2022_02_22_Time_1_ms_(95.98%)_Space_42.9_MB_(6.23%)
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
public class Solution {
public List wordBreak(String s, List wordDict) {
List result = new LinkedList<>();
Set wordSet = new HashSet<>(wordDict);
dfs(s, wordSet, 0, new StringBuilder(), result);
return result;
}
private void dfs(
String s, Set wordSet, int index, StringBuilder sb, List result) {
if (index == s.length()) {
if (sb.charAt(sb.length() - 1) == ' ') {
sb.setLength(sb.length() - 1);
}
result.add(sb.toString());
return;
}
int len = sb.length();
for (int i = index + 1; i <= s.length(); ++i) {
String subs = s.substring(index, i);
if (wordSet.contains(subs)) {
sb.append(subs).append(" ");
dfs(s, wordSet, i, sb, result);
}
sb.setLength(len);
}
}
}