Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
For example, given
s = "leetcode",
dict = ["leet", "code"].
Return true because "leetcode" can be segmented as "leet code".
题目链接:https://leetcode.com/problems/word-break/
题目分析:比Word Break 2简单,这里不需要记录答案,直接判断即可
public class Solution {
public boolean DFS (int pos, List<String>[] dp, boolean[] flag) {
if (pos == 0) {
flag[0] = true;
return true;
}
for (int i = 0; i < dp[pos].size(); i ++) {
DFS(pos - dp[pos].get(i).length(), dp, flag);
if (flag[0]) {
return true;
}
}
return false;
}
public boolean wordBreak(String s, Set<String> wordDict) {
int len = s.length();
if (len == 0 || wordDict.size() == 0) {
return false;
}
List<String>[] dp = new ArrayList[len + 1];
dp[0] = new ArrayList<>();
for (int st = 0; st < len; st ++) {
if (dp[st] != null) {
for (String word: wordDict) {
int ed = st + word.length();
if (ed <= len) {
if(s.substring(st, ed).equals(word) == true) {
if (dp[ed] == null) {
dp[ed] = new ArrayList<>();
}
dp[ed].add(word);
}
}
}
}
}
if (dp[len] == null) {
return false;
}
boolean[] flag = new boolean[1];
flag[0] = false;
return DFS(len, dp, flag);
}
}

本文详细解析了LeetCode中的单词拆分问题(Word Break),通过递归深度优先搜索(DFS)的方法来判断给定字符串是否能由字典中的单词完全匹配组成,并附带完整的Java实现代码。
515

被折叠的 条评论
为什么被折叠?



