1、给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。

例如:
给定s=“leetcode”;
dict=["leet", "code"].
返回true,因为"leetcode"可以被分割成"leet code".

参考代码如下:

public boolean wordBreak(String s, Set<String> dict) {
       if(s==null || s.length()==0 || dict == null || dict.size() == 0){
           return false;
       }
       boolean[] flag = new boolean[s.length() + 1];
       flag[0] = true;
       for(int i=1; i<=s.length();i++){
           for(int j=i-1; j>=0; j--){
               if(flag[j] && dict.contains(s.substring(j,i))){
                   flag[i] = true;
                   break;
               }else{
                   flag[i] = false;
               }
           }
       }
       return flag[s.length()];

}

2、给定一个字符串s和一组单词dict,在s中添加空格将s变成一个句子,使得句子中的每一个单词都是dict中的单词

返回所有可能的结果

例如:给定的字符串s ="catsanddog",

dict =["cat", "cats", "and", "sand", "dog"].

返回的结果为["cats and dog", "cat sand dog"].

import java.util.*;
public class Solution {
    public ArrayList<String> list=new ArrayList<>();
    public ArrayList<String> wordBreak(String s, Set<String> dict) {
        DFS(s,dict, s.length(), "");
        return list;
    }
    private void DFS(String s, Set<String>dict, int index, String str){
        if(index<=0)
            if(str.length() > 0)
                list.add(str.substring(0,str.length()-1));
        for(int i=index; i>=0; i--){
            if(dict.contains(s.substring(i, index)))
                DFS(s,dict,i,s.substring(i,index)+" "+str);
        }
    }
}