动态规划之140 Word Break2

这是一题不太明显的动态规划,主要考察的应该是深度优先搜索。

static LinkedList<String> list = new LinkedList<String>();
    static ArrayList<String> res=new ArrayList<String>();
    public ArrayList<String> wordBreak(String s, List<String> set) {
        list.clear();
        res.clear();
        if (s == null || s.length() == 0)
            return res;
        if (wordBreakcheck(s, set))
            dfs(s, set);
        return res;
    }

    private void dfs(String s, List<String> set) {
        if (s==null||s.length()==0) {
            StringBuilder sb = new StringBuilder();
            for (String ss : list) {
                sb.append(ss);
                sb.append(" ");
            }
            res.add(sb.toString().trim());
            return;
        }
        for (int i = 1; i <= s.length(); i++) {
            String str=s.substring(0, i);
            if (set.contains(str)) {
                list.add(str);
                //s = s.substring(i, s.length());
                dfs(s.substring(i, s.length()), set);
                list.pollLast();
            }
        }
    }
    
    public boolean wordBreakcheck(String s, List<String> set) {
        if (s == null || s.length() == 0)
            return true;
        boolean[] res = new boolean[s.length() + 1];
        res[0] = true;
        for (int i = 0; i < s.length(); i++) {
            StringBuilder str = new StringBuilder(s.substring(0, i + 1));
            for (int j = 0; j <= i; j++) {
                if (res[j] && set.contains(str.toString())) {
                    res[i + 1] = true;
                    break;
                }
                str.deleteCharAt(0);
            }
        }
        return res[s.length()];
    }

if (set.contains(str)) {
list.add(str);
dfs(s.substring(i, s.length()), set);
list.pollLast();
}

if (set.contains(str)) {
list.add(str);
s = s.substring(i, s.length());
dfs(s, set);
list.pollLast();
}

 以上两种写法是完全不一样的,已经多次翻车。第一种写法,dfs函数执行完后s然后是没有切割的字符串,而第二种写法是dfs执行完后s已经是切割完的了。

加油啦!加油鸭,冲鸭!!!
原文地址:https://www.cnblogs.com/clarencezzh/p/10158829.html