力扣 单词拆分

动态规划,字符串截取,可重复用,集合类。

题目

单词可以重复使用,一个单词可用多次,应该是比较灵活的组合形式了,可以想到用dp,遍历完单词后的状态的返回值。而这里的wordDict给出的是list,但可以用set,因为hashset可以去重,hashset的查找比list要快。然后就是这里的额dp数组是个boolean值,然后用截取字符串的形式去看set里能不能找到,找不到说明拼不了。

时间复杂度:O(n^2) ,空间复杂度:O(n) 。

java 复制代码
public class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        Set<String> w = new HashSet(wordDict);
        boolean[] dp = new boolean[s.length() + 1];
        dp[0] = true;
        for (int i = 1; i <= s.length(); i++) {
            for (int j = 0; j < i; j++) {
                if (dp[j] && w.contains(s.substring(j, i))) {
                    dp[i] = true;//能找到
                    break;
                }
            }
        }
        return dp[s.length()];//遍历到最后一个字符时这个单词的状态
    }
}

状态维护,boolean类型很适合做标记位。

相关推荐
暴力求解10 分钟前
C++类和对象(上)
开发语言·c++·算法
JKHaaa18 分钟前
几种简单的排序算法(C语言)
c语言·算法·排序算法
让我们一起加油好吗24 分钟前
【基础算法】枚举(普通枚举、二进制枚举)
开发语言·c++·算法·二进制·枚举·位运算
异常君27 分钟前
MyBatis 中 SqlSessionFactory 和 SqlSession 的线程安全性深度分析
java·面试·mybatis
crud35 分钟前
Spring Boot 使用 spring-boot-starter-validation 实现优雅的参数校验,一文讲透!
java·spring boot
Dcs38 分钟前
常见 GC 垃圾收集器对比分析
java
程序员岳焱41 分钟前
Java高级反射实战:15个场景化编程技巧与底层原理解析
java·后端·编程语言
程序员小假41 分钟前
说一说 Netty 中的心跳机制
java·后端
FogLetter42 分钟前
微信红包算法揭秘:从随机性到产品思维的完美结合
算法
真实的菜1 小时前
消息队列处理模式:流式与批处理的艺术
java