首页 > 其他分享 >单词拆分(动态规划)

单词拆分(动态规划)

时间:2025-01-08 18:55:11浏览次数:1  
标签:字典 单词 字符串 拆分 wordDict 动态 true dp size

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true

注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

 

示例 1:

输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true
解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。

示例 2:

输入: s = "applepenapple", wordDict = ["apple", "pen"]
输出: true
解释: 返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。
     注意,你可以重复使用字典中的单词。

示例 3:

输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
输出: false

 

该题的思路与零钱兑换(动态规划)的思路很相似,都是从dp[0]一步一步计算到dp[n]

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        int m = s.size();
        int n = wordDict.size();
        vector<bool> dp(m+1);//默认初始化为false
        //dp[i]表示以i为结尾的前i个字符组成的字符串能否由wordDict组成
        //dp[0]初始化为true
        dp[0] = true;
        for(int i=1;i<=m;i++){
            for(int j=0;j<n;j++){
                int size = wordDict[j].size();
                if(i-size>=0){//首先以i为结尾的字符串长度要大于等于size
                    //截取以i为结尾的字符串后面大小为size的字符串为str
                    string str = s.substr(i-size,size);
                    //str要等于wordDict[j]并且以i-size为结尾的字符串能被wordDict拆分。
                    //则说明以i为结尾的字符串也能被wordDict拆分
                    dp[i]  = str==wordDict[j]&&dp[i-size];
                    if(dp[i]) break;//一旦发现dp[i]为true,就不必继续搜索字典
                }
            }
        }
        return dp[m];//返回以最终的字符串能否由wordDict组成
    }
};

 

标签:字典,单词,字符串,拆分,wordDict,动态,true,dp,size
From: https://www.cnblogs.com/yueshengd/p/18660360

相关文章

  • 零钱兑换(动态规划)
    给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。 示例 1:输入:coins=[1,2,5],amount=11......
  • 完全平方数(动态规划)
    给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。示例 1:输入:n=12输出:3解释:12=4+4+4示例2:输入:n=13......
  • 二维动态规划2
    [Algo]二维动态规划21.不同的子序列//4.不同的子序列//https://leetcode.cn/problems/distinct-subsequences/longnumDistinct(strings,stringt){intn=s.length(),m=t.length();vector<vector<long>>dp(n+1,vector<long>(m+1));//dp[i]......
  • 数据查询优化策略: 全聚合下推、分区剪枝、部分聚合下推以及动态数据迁移
    关于数据虚拟化在逻辑数据仓库(LogicalDataWarehouse)和逻辑数据湖(LogicalDataLake)架构中查询优化的实际应用示例。本文将为您详细介绍这些场景中最重要的优化技术,包括 全聚合下推(FullAggregationPushdown)、分区剪枝(PartitionPruning)、部分聚合下推(PartialAggregationP......
  • CICD Day6、基于kubernetes动态创建代理
    Jenkins支持基于kubernetes动态创建代理,使代理程序能够运行在Pod中,这种方法可以根据构建任务的变化动态的增减代理,充分利用kubernetes的特性,为分布式构建提供灵活的运行环境如下图所示当项目触发构建时,Jenkins会调用kubernetesapi创建一个专用的pod作为从节点,在该pod执行......
  • Vue.js组件开发-如何动态更改图表类型
    Vue.js组件开发中,动态更改图表类型通常涉及到更新图表库的配置并重新渲染图表。如果使用的是ECharts,可以通过修改图表配置中的type属性来实现,并调用setOption方法来应用更改。示例:展示如何在Vue.js组件中动态更改ECharts图表类型:<template><div><divref="chart"st......
  • 打家劫舍(动态规划)
    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内......
  • Luogu P3041 USACO12JAN Video Game G 题解 [ 紫 ] [ AC 自动机 ] [ 动态规划 ]
    VideoGamesG:弱智紫题,30min切了,dp思路非常板。多模式串一看肯定就是要建出AC自动机,然后在fail树里下传标记,预处理每个节点到达后的得分。然后设计\(dp_{i,j}\)表示第\(i\)个字符,AC自动机里匹配节点在\(j\)的最大答案,刷表法转移即可:\[dp_{i+1,ch_{j,c}}\gets\ma......
  • 最低票价(记忆化搜索/动态规划)
    题目链接:https://leetcode.cn/problems/minimum-cost-for-tickets/题意:给你一个数组days[]代表旅行的日期,一个数组costs[],可以分别选择1天或7天或30天的票,问你使旅行结束所需要的最低票价是多少示例1:输入:days=[1,4,6,7,8,20],costs=[2,7,15]输出:11解释:例如,这里有......
  • 动态规划大杂烩
    全放一起的话实在是很卡,所以这其实是个目录。更新日志:2025.1.7:整理出这个东西动态规划基本类型待开坑。动态规划优化高维前缀和(SOSDP)斜率优化wqs二分动态dp树上依赖性背包长剖优化dp例题动态规划题单1动态规划题单2动态规划题单3......