AI 助理
备案 控制台
开发者社区 云计算 文章 正文

leetcode 139单词拆分

简介: leetcode 139单词拆分

单词拆分

a5b6d142b78a404baab063218016d0fb.png

动态规划

单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满。
拆分时可以重复使用字典中的单词,说明就是一个完全背包!


dp[i] : 字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词。

dp[0]初始为true完全就是为了推导公式。

下标非0的dp[i]初始化为false,只要没有被覆盖说明都是不可拆分为一个或多个在字典中出现的单词。

1e233e04b60b4d66a438501c16e3c77d.png


dp[j]=true 来自于 dp[i]=true + 字串s(i,j-i)可以在字典中找到。

例如输入“leetcode” ,dp[ 0 ] 初始化为1 ,

dp[ 4 ] = 1 , 因为 dp[ 0 ] =1 ,字串 s( 0 , 4 - 0)即”leet“ 可以在字典找到

dp[ 8 ] = 1 , 因为 dp[ 4 ] =1 ,字串 s( 4 , 8 - 4)即”code“ 可以在字典找到

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        vector<bool> dp(s.size()+1 ,false);
        unordered_set<string> wordSet(wordDict.begin(), wordDict.end());
        dp[0] = true;
        // dp[j]=true 来自于 dp[i]=true + 字串s(i,j-i)可以在字典中找到。
        for(int j = 1 ; j<=s.size() ; j++)//背包尺寸
        {
            for(int i = 0 ; i < j ;i++ )//字串长度
            {
                string word = s.substr( i , j-i );
                if(wordSet.find(word) != wordSet.end() && dp[i]==true )
                    dp[j] = true;
            }  
        }
        // for(auto it:dp) cout<<it<<' ';
        return dp[s.size()];
    }
};

二刷

回溯(超时)

class Solution {
public:
    bool result = false;
    vector<string> path;
    void track_back(string &s, vector<string>& wordDict ,int indnx)
    {
        if(result == true) return;
        if(path.size() != 0)
        {
            string tmp;
            for(int i=0 ; i<path.size();i++)
                tmp += path[i];
            if(tmp.size() > s.size()) return;
            else if(tmp == s) 
            {
                result = true;
                return;
            }
        }
        for(int i=indnx ; i<wordDict.size() ;i++)
        {
            path.push_back(wordDict[i]);
            track_back(s,wordDict,indnx);
            path.pop_back();
        } 
        return;
    }
    bool wordBreak(string s, vector<string>& wordDict) {
        track_back(s,wordDict,0);
        return result;
    }
};

动态规划

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        unordered_set<string> wordDict_set(wordDict.begin(),wordDict.end());
        vector<bool> dp(s.size()+1 , false);
        dp[0] = true;
        for(int j=1 ; j<=s.size() ;j++)
        {
            for(int i=0 ; i<j ; i++)
            {
                string tmp = s.substr(i,j-i);
                if(wordDict_set.find(tmp) != wordDict_set.end() && dp[i] == true)
                    dp[j] = true;
            }
        }
        return dp[s.size()];
    }
};
songwei4615.
目录
相关文章
服务端技术栈
|
1月前
|
算法
LeetCode第58题最后一个单词的长度
LeetCode第58题"最后一个单词的长度"的解题方法,通过从字符串末尾向前遍历并计数非空格字符,直接得出最后一个单词的长度。
服务端技术栈
27 0
LeetCode第58题最后一个单词的长度
BetterBench
|
1月前
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
BetterBench
21 4
BetterBench
|
1月前
|
Python
【Leetcode刷题Python】生词本单词整理
文章提供了一个Python程序,用于帮助用户整理和排版生词本上的单词,包括去除重复单词、按字典序排序,并按照特定的格式要求进行打印排版。
BetterBench
21 3
BetterBench
|
1月前
|
Python
【Leetcode刷题Python】343. 整数拆分
LeetCode 343题 "整数拆分" 的Python解决方案,使用动态规划算法来最大化正整数拆分为多个正整数之和的乘积。
BetterBench
15 0
BetterBench
|
1月前
|
Python
【Leetcode刷题Python】318. 最大单词长度乘积
本文提供了LeetCode题目318的Python编程解决方案,题目要求在一个字符串数组中找出两个不含有公共字母的单词,且这两个单词的长度乘积最大,如果不存在这样的两个单词,则返回0。
BetterBench
13 0
知更鸟呆呆
|
3月前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
知更鸟呆呆
37 1
数据分析螺丝钉
|
3月前
|
存储 SQL 算法
LeetCode题58: 5种算法实现最后一个单词的长度【python】
LeetCode题58: 5种算法实现最后一个单词的长度【python】
数据分析螺丝钉
32 1
码农阿豪
|
3月前
|
算法 测试技术 索引
力扣经典150题第三十二题:串联所有单词的子串
力扣经典150题第三十二题:串联所有单词的子串
码农阿豪
17 0
码农阿豪
|
3月前
|
算法
力扣经典150题第二十一题:反转字符串中的单词
力扣经典150题第二十一题:反转字符串中的单词
码农阿豪
32 0
码农阿豪
|
3月前
|
算法
力扣经典150题第十九题:最后一个单词的长度
力扣经典150题第十九题:最后一个单词的长度
码农阿豪
22 0

热门文章

最新文章

  • 1
    [LeetCode]--111. Minimum Depth of Binary Tree
  • 2
    leetcode 2 Add Two Numbers
  • 3
    [LeetCode] Two Sum II - Input array is sorted
  • 4
    [LeetCode]--344. Reverse String
  • 5
    [LeetCode] Remove Comments 移除注释
  • 6
    LeetCode - 11. Container With Most Water
  • 7
    leetcode 26 Remove Duplicates from Sorted Array
  • 8
    [LeetCode] Maximum Product of Word Lengths 单词长度的最大积
  • 9
    LeetCode 268 Missing Number(丢失的数字)
  • 10
    leetcode 88 Merge Sorted Array
  • 1
    Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
    43
  • 2
    [leetcode] 快乐数 E
    40
  • 3
    [leetcode 链表] 反转链表 vs 链表相交
    40
  • 4
    [leetcode] 705. 设计哈希集合
    40
  • 5
    [leetcode~dfs]1261. 在受污染的二叉树中查找元素
    41
  • 6
    [leetcode] 670. 最大交换 M
    39
  • 7
    [leetcode~数位动态规划] 2719. 统计整数数目 hard
    44
  • 8
    刷题之Leetcode160题(超级详细)
    45
  • 9
    刷题之Leetcode206题(超级详细)
    45
  • 10
    刷题之Leetcode707题(超级详细)
    41
  • 相关电子书

    更多
  • 低代码开发师(初级)实战教程
  • 冬季实战营第三期:MySQL数据库进阶实战
  • 阿里巴巴DevOps 最佳实践手册
  • 下一篇
    搭建自己的私有云盘工具总结

    玻璃钢生产厂家将军马玻璃钢雕塑龙泉玻璃钢牛雕塑商场玻璃钢花盆哪家好怀化长沙玻璃钢雕塑厂家成都欧式玻璃钢雕塑优势邯郸铸造玻璃钢雕塑厂家哈密玻璃钢雕塑定制澳门玻璃钢牛雕塑广东户外商场美陈怎么样上海玻璃钢动物雕塑供应商黄州玻璃钢花盆花器江苏多彩玻璃钢雕塑供应商商场怀旧美陈玉溪市玻璃钢雕塑批发玻璃钢公仔雕塑公司制作玻璃钢雕塑报价选哪家财神爷人物玻璃钢雕塑昆明那有卖玻璃钢花盆的青岛景区玻璃钢雕塑价格佛山郑成功玻璃钢人物雕塑商场玻璃钢花盆颜色广东玻璃钢仿真雕塑方圳玻璃钢花盆雕塑家具辽宁卡通玻璃钢雕塑生产厂家普洱玻璃钢雕塑厂家直供通榆玻璃钢花盆花器北京室内商场美陈制作北京节庆商场美陈价钱玻璃钢仿真雕塑广州天水广场玻璃钢雕塑设计香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

    玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化