力扣 单词拆分

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

题目

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

相关推荐
是苏浙7 小时前
零基础入门C语言之C语言实现数据结构之顺序表应用
c语言·数据结构·算法
前端架构师-老李7 小时前
进入新岗位的第一课——潜龙勿用
职场和发展
清水7 小时前
Spring Boot企业级开发入门
java·spring boot·后端
一个不称职的程序猿8 小时前
高并发场景下的缓存利器
java·缓存
2301_801252228 小时前
Tomcat的基本使用作用
java·tomcat
lkbhua莱克瓦248 小时前
Java基础——常用算法3
java·数据结构·笔记·算法·github·排序算法·学习方法
小白程序员成长日记8 小时前
2025.11.07 力扣每日一题
数据结构·算法·leetcode
·白小白8 小时前
力扣(LeetCode) ——209. 长度最小的子数组(C++)
c++·算法·leetcode
小猪咪piggy8 小时前
【算法】day16 动态规划
算法·动态规划
ohnoooo98 小时前
251106 算法
数据结构·c++·算法