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命令实时查看最新的日志信息
    什么是缺陷(bug)
    APP 崩溃测试点小结
    软件测试之权限测试
    web安全测试之 xss攻击
    URL详谈
    随机生成名字或短句代码机
    JAVA环境变量配置
    Properties类与读取properties文件
    JAVA 打印九九乘法表
  • 原文地址:https://www.cnblogs.com/stul/p/11544288.html
Copyright © 2011-2022 走看看