力扣 单词拆分

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

题目

单词可以重复使用,一个单词可用多次,应该是比较灵活的组合形式了,可以想到用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类型很适合做标记位。

相关推荐
Han.miracle3 小时前
数据结构——二叉树的从前序与中序遍历序列构造二叉树
java·数据结构·学习·算法·leetcode
Le1Yu4 小时前
分布式事务以及Seata(XA、AT模式)
java
寒山李白5 小时前
关于Java项目构建/配置工具方式(Gradle-Groovy、Gradle-Kotlin、Maven)的区别于选择
java·kotlin·gradle·maven
mit6.8245 小时前
前后缀分解
算法
你好,我叫C小白6 小时前
C语言 循环结构(1)
c语言·开发语言·算法·while·do...while
无妄无望6 小时前
docker学习(4)容器的生命周期与资源控制
java·学习·docker
MC丶科6 小时前
【SpringBoot 快速上手实战系列】5 分钟用 Spring Boot 搭建一个用户管理系统(含前后端分离)!新手也能一次跑通!
java·vue.js·spring boot·后端
千码君20166 小时前
React Native:从react的解构看编程众多语言中的解构
java·javascript·python·react native·react.js·解包·解构
夜白宋7 小时前
【word多文档docx合并】
java·word
@yanyu6667 小时前
idea中配置tomcat
java·mysql·tomcat