zoukankan      html  css  js  c++  java
  • 动态规划之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已经是切割完的了。

    加油啦!加油鸭,冲鸭!!!
  • 相关阅读:
    WebStorm 使用
    Mac上因磁盘格式导致gulp无限刷新问题
    JS数组随机排序
    Javascript高性能动画与页面渲染
    两列布局,左边固定,右边自适应的三种方法
    google pay app权限使用说明
    javaFX
    https网站引用http路径的js和css失效解决办法
    tomcat笔记
    java sigar.jar
  • 原文地址:https://www.cnblogs.com/clarencezzh/p/10158829.html
Copyright © 2011-2022 走看看