zoukankan      html  css  js  c++  java
  • Leetcode 139 单词拆分 JAVA

    最能想到的是暴力的方法。 动态规划在这里是最有效果的解法。

    时间复杂度为 O( n )。

    n = 0 的时候, f 为 true。

    n = 1 的时候, 只需要判断第一个字母是否在字典里。设置一个结果为 true。

    n = 2 的时候, 需要判断 0 - 1 个字母,也就是 f(1) 是否为 true, 其次还要判断第二个字母是否在字典。

    推广到 第 j 个字母的时候,0 - j 个字母,也就是 f ( j )是否为 true,这是第一个条件。第二个条件是:i - j 这个串是否在字典中,如果在字典中,那么 f ( i )就为 true。

    否则为 false。

    最后结果是 f ( len )的 Boolean 值。

    这里还有两个知识点

    1.list 集合里面有一个函数 contains ( a )。如果元素 a 在list 这个集合中,返回值为 true ,不在的话返回值就为 false。

    2.string里面有一个函数,substring(i, j),将串里面从 i 到 j 的序列拿出来,作为返回值。

    代码:

    class Solution {
        public boolean wordBreak(String s, List<String> wordDict) {
            int len = s.length();
            boolean []dp = new boolean[len+1];
            dp[0] = true;
            for(int i = 1; i <= len; i++)
                for(int j = 0; j < i; j++){
                    if(dp[j] && wordDict.contains(s.subSequence(j,i))){
                        dp[i] = true;
                        break;
                    }
                        
                }
            return dp[len];
        }
    }
    
  • 相关阅读:
    Linux修改环境变量的方法
    读书笔记:高性能网站建设
    xtrabackup备份还原
    自制mysql.rpm安装包
    python装饰器
    python中闭包
    python中返回函数
    python中自定义排序函数
    python中filter()函数
    python中reduce()函数
  • 原文地址:https://www.cnblogs.com/stul/p/11544288.html
Copyright © 2011-2022 走看看