动态规划之140 Word Break2

Posted clarencezzh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划之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已经是切割完的了。

 










以上是关于动态规划之140 Word Break2的主要内容,如果未能解决你的问题,请参考以下文章

动态规划之139 Word Break

376,动态规划之编辑距离

leetcode-编辑距离(动态规划)-72

算法---动态规划(编辑距离不同子序列动态规划总结)

编辑距离(动态规划)

动态规划——Edit Distance