首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >leetcode 139

leetcode 139

作者头像
ACK
发布于 2020-01-14 09:22:48
发布于 2020-01-14 09:22:48
32100
代码可运行
举报
运行总次数:0
代码可运行

一道动态规划题目

给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。

说明:

  • 拆分时可以重复使用字典中的单词。
  • 你可以假设字典中没有重复的单词。

链接

自己算法比较渣…看到这个题目的时候一开始没想到动态规划的思路,就用传统方法做。。结果gg了。后来上厕所的时候突然想通了2333

这里我们设定一个长度为字符串长度的状态记录数组state,state[i]表示字符串从0到i是可以被正确切割的。而求state[i]为true的条件是,state[jj]能被切割,并且s[j]到s[j]这子字符串在字典中。于是代码思路就比较简单了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 动态规划
// state[i]表示s[0]到s[i]都能被切割成功
var wordBreak = function (s, wordDict) {
    if (s.length === 0) {
        return false
    }
    const dir = new Map();
    for (let v of wordDict) {
        dir.set(v, 1);
    }
    const state = new Array(s.length + 1).fill(false);
    state[0] = true;
    for (let i = 1; i <= s.length; i++) {
        for (let j = i - 1; j >= 0; j--) {
         // state[i]为true是state[j]为true且s[j]到s[i]都为true
            if (state[j] && dir.get(s.slice(j, i))) {
                state[i] = true;
                break;
            }
        }
    }
    return state[s.length]
};

动态规划有时候真的不太好想出来。基础的动态规划题目还是要多加练习才行

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档