您的位置:首页 > 其它

LeetCode 139 Word Break (DFS 分词 解存在性判断)

2016-09-17 21:37 323 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: