题目描述
Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word.
Return all such possible sentences.
For example, given
s = "catsanddog"
,
dict = ["cat", "cats", "and", "sand", "dog"]
.
A solution is ["cats and dog", "cat sand dog"]
.
解题思路
递归求解,将s遍历,分为两部分,如果后半部分为dict中的单词,则再递归求解前半部分,最终得到所有的组合。
ps:解法比较暴力,有待优化。
/**
* 给出s = "leetcode"是可以由dict = ["leet", "code"]中单词进行划分的所有组合
* 递归求解
* @param s
* @param dict
* @return
*/
public static List<String> wordBreak(String s, Set<String> dict) {
int strLen = s.length();
List<String> result = new ArrayList<String>();
for (int i = strLen - 1; i >= 0; i--) {
String word = s.substring(i, strLen);
if (dict.contains(word)) {
//如果[i,strlen-1]属于dict中单词
if (i == 0) {
result.add(s);
} else {
//递归求解
List<String> childList = wordBreak(s.substring(0, i),
dict);
if (childList.size() != 0) {
for (String str : childList) {
str = str + " " + word;
result.add(str);
}
}
}
}
}
return result;
}