LeetCode OJ --问题与解答 Word BreakII

来源:互联网 发布:普通话翻译客家话软件 编辑:程序博客网 时间:2024/06/07 21:45

题目


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"].



思路


1.1 DFS解法把每种情况都考虑,并且使用回溯。

1.2 时间复杂度依然同题目1一样,指数时间,能够避免尽量不去使用。

// 1 dfs回溯解法    public List<String> wordBreak2_1(String s, HashSet<String> dict){        List<String> ans = new LinkedList<String>();        if(s.length()==0){            return ans;        }        String temp ="";        useme(s,dict,ans,temp);        return ans;    }        public void useme(String s, HashSet<String> dict,     LinkedList<String> ans,String temp){    // 当剩余字符串为0的时候,就代表找到解了。        if(s.length()==0){            temp.substring(0,temp.length()-1);            ans.add(temp);            return;        }        // 每次都要检查当前字符串所有可能切分长度        for(int i=0;i<s.length();i++){            String cur = s.substring(0,i+1);            if(dict.contains(cur)){                int n = temp.length();                temp=temp+cur+" ";// 切分好后,对剩余字符串递归                useme(s.substring(i+1),dict,ans,temp);                temp=temp.substring(0,n);            }        }





0 0