题目介绍
力扣140题:leetcode-cn.com/problems/wo…
回溯
该题目最直观的方法就是使用回溯算法。
首先遍历字符串s,找到在wordDict中出现的单词,将该单词添加到路径path中,接着向下递归,继续寻找,直到遍历完字符串s,将path中的单词使用空格符号拼接起来组成一个解,之后进行回溯,继续求解其他解。
代码如下:
class Solution {
public List<String> wordBreak(String s, List<String> wordDict) {
//存储wordDict
Set<String> set = new HashSet<>(wordDict);
//存储返回结果
List<String> ans = new ArrayList<>();
dfs(s, ans, 0, new LinkedList<>(), set);
return ans;
}
public void dfs(String s, List<String> ans, int idx, Deque<String> path, Set<String> set) {
if (idx == s.length()) {
//将每个单词使用空格符号分隔开,然后连接成字符串
ans.add(String.join(" ", path));
return;
}
for (int i = idx; i < s.length(); i++) {
//截取字符串
String str = s.substring(idx, i + 1);
//判断截取的单词是否在wordDict中
if (set.contains(str)) {
//添加单词
path.add(str);
//向下递归
dfs(s, ans, i + 1, path, set);
//回溯
path.removeLast();
}
}
}
}