力扣 单词拆分

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

题目

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

相关推荐
mit6.8244 小时前
pair<int, TreeNode*> dfs
算法
Li_yizYa4 小时前
Redis-常见数据类型及应用场景
java·数据库·redis
麦兜*4 小时前
【springboot】图文详解Spring Boot自动配置原理:为什么@SpringBootApplication是核心?
android·java·spring boot·spring·spring cloud·tomcat
rabbit_pro4 小时前
Java使用Mybatis-Plus封装动态数据源工具类
java·python·mybatis
期待のcode4 小时前
Java虚拟机类加载机制
java·开发语言
短剑重铸之日4 小时前
《SpringBoot4.0初识》第四篇:原生镜像
java·原生镜像·springboot4.0
程序员欣宸4 小时前
LangChain4j实战之十二:结构化输出之三,json模式
java·人工智能·ai·json·langchain4j
天若有情6734 小时前
打破思维定式!C++参数设计新范式:让结构体替代传统参数列表
java·开发语言·c++
初晴や4 小时前
【C++】图论:基础理论与实际应用深入解析
c++·算法·图论