【LeetCode】Word Break II 解题报告

来源:互联网 发布:排序算法的比较 编辑:程序博客网 时间:2024/05/22 07:39

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

【题意】

相比Word Break,这次不仅要判断字符串能否被分解,还要把所有的分解情况给找出来。这样的话,我在Word Break用过的暴力法就可以很容易得改成这道题。


==================== 暴力法、穷尽法 ====================

【Java代码】

class Solution {    List<String> ret;        public List<String>  wordBreak(String s, Set<String> dict) {        String[] all = dict.toArray(new String[0]);                ret = new ArrayList<String>();                //如果s中有字母没在dict出现过,那么结果肯定为false        //这段代码的作用就是防止暴力法超时,有点投机的做法,我在Word Break解题报告中已讲过        for (int i = 0; i < s.length(); i++) {            boolean flag = false;            for (int j = 0; j < all.length; j++) {                if (all[j].indexOf(s.charAt(i)) > -1) {                    flag = true;                    break;                }            }            if (!flag) {                return ret;            }         }                nextWord(0, s, all, "");        return ret;    }        void nextWord(int pos, String s, String[] all, String sent) {        if (pos == s.length()) {            ret.add(sent.trim());        }                for (int i = 0; i < all.length; i++) {            if (s.indexOf(all[i], pos) == pos) {                String str = sent;                str += all[i] + " ";                nextWord(pos + all[i].length(), s, all, str);            }        }    }}


0 0