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已经是切割完的了。

    加油啦!加油鸭,冲鸭!!!
  • 相关阅读:
    pycharm快捷键、常用设置、包管理
    【转载】TCP socket心跳包示例程序
    【转载】C++定时器实现
    金龙一卡通登陆爬取数据 免验证码 多线程 学生卡 CAUC
    python3 正方教务系统 爬取数据
    29、Python之Web框架Django入门
    28、Python之前端组件学习
    27、Python之jQuery基础
    26、Python之JavaScript进阶篇
    25、Python之JavaScript基础
  • 原文地址:https://www.cnblogs.com/clarencezzh/p/10158829.html
Copyright © 2011-2022 走看看