Leetcode 140. Word Break II

来源:互联网 发布:虚拟机网络不可用 编辑:程序博客网 时间:2024/06/11 20:35

Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, add spaces in s to construct a sentence where each word is a valid dictionary word. You may assume the dictionary does not contain duplicate words.

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



public List<String> wordBreak(String s, List<String> wordDict) {        Set<String> set = new HashSet<>(wordDict);        List<String> res = new ArrayList<>();          if(s == null || s.length() == 0) return res;        if(wordBreakcheck(s, set)) helper(s,set,0,"",res);          return res;    }        public boolean wordBreakcheck(String s, Set<String> dict) {        boolean[] res = new boolean[s.length()+1];        res[0] = true;        for(int i = 1; i <= s.length(); i++){            for(int j = i - 1; j >= 0; j--){                if(res[j] && dict.contains(s.substring(j, i))){                    res[i] = true;                    break;                }            }        }        return res[s.length()];    }     private void helper(String s, Set<String> dict, int start, String tmp, List<String> res){          if (start >= s.length()) {            res.add(tmp);            return;        }                StringBuilder sb = new StringBuilder();        for (int i = start; i < s.length(); i++) {            sb.append(s.charAt(i));            if (dict.contains(sb.toString())) {                String newString = new String();                if (tmp.length() > 0) newString = tmp + " " + sb.toString();                else newString = sb.toString();                helper(s, dict, i + 1, newString, res);            }        }    }



    public List<String> wordBreak(String s, List<String> wordDict) {        List<String> res = new ArrayList<>();        if(s.length() == 0) return res;        Map<String, List<String>> map = new HashMap<>();        return helper(s, wordDict, map);    }    private List<String> helper(String s, List<String> wordDict, Map<String, List<String>> map) {        if(map.containsKey(s)) return map.get(s);        List<String> res = new ArrayList<>();        if(s.length() == 0) {            res.add("");            return res;        }        for(String word : wordDict) {            if(s.startsWith(word)) {                List<String> temp = helper(s.substring(word.length()), wordDict, map);                for(String str : temp) {                    res.add(word + (str.length() == 0 ? "" : " ") + str);                }            }        }        map.put(s, res);        return res;    }






原创粉丝点击