力扣 单词拆分

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

题目

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

相关推荐
飛_1 小时前
解决VSCode无法加载Json架构问题
java·服务器·前端
朝朝又沐沐4 小时前
算法竞赛阶段二-数据结构(36)数据结构双向链表模拟实现
开发语言·数据结构·c++·算法·链表
木棉软糖4 小时前
一个MySQL的数据表最多能够存多少的数据?
java
程序视点4 小时前
Java BigDecimal详解:小数精确计算、使用方法与常见问题解决方案
java·后端
愿你天黑有灯下雨有伞4 小时前
Spring Boot SSE实战:SseEmitter实现多客户端事件广播与心跳保活
java·spring boot·spring
薰衣草23334 小时前
一天两道力扣(6)
算法·leetcode
逝雪Yuki4 小时前
Leetcode——287. 寻找重复数
c++·leetcode·二分查找·双指针·环形链表
剪一朵云爱着4 小时前
力扣946. 验证栈序列
算法·
遇见尚硅谷5 小时前
C语言:*p++与p++有何区别
c语言·开发语言·笔记·学习·算法
Java初学者小白5 小时前
秋招Day20 - 微服务
java