day39|139.单词拆分 背包问题ending
创始人
2024-05-28 16:30:08
0

139.单词拆分

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。

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

示例 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

问题分析: 

1、确定dp数组以及下标的含义

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

2、确定递推公式

完全背包,重复利用物品,且为排列数

字符串为背包,单词为物品,截字符串(j-len,j)看是否是一个单词,并且他的前序子串也是一个或多个单词,也就是判断是否为true

所以递推公式为:

if(j>=len&&dp[j-len]&&word.equals(s.substring(j-len,j)))就为true

3、dp数组初始化

初始化dp[0]=true,否则所有都为false

4、确定遍历顺序

本题要求是排列数,有顺序要求

5、打印dp数组

class Solution {public boolean wordBreak(String s, List wordDict) {boolean[] dp=new boolean[s.length()+1];//有空字符串dp[0]=true;for (int j=1;j<=s.length();j++){for (String word:wordDict){int len=word.length();if (j>=len&&dp[j-len]&&word.equals(s.substring(j-len,j))){dp[j]=true;break;}}}/*  for (int j=1;j<=s.length();j++){System.out.print(dp[j]+" ");}*/return dp[s.length()];}
}

相关内容

热门资讯

【微资讯】内蒙古和林格尔这个产... (转自:奶牛微看)内蒙古和林格尔县盛乐镇台基营村3000亩优质紫花苜蓿种植基地绿意盎然;现代化牧场内...
薛凯琪方严正声明抵制AI换脸造... 转自:荔枝新闻 【#薛凯琪方严正声明抵制AI换脸造谣##...
中锐股份今日大宗交易折价成交3... 7月4日,中锐股份大宗交易成交366万股,成交额1024.8万元,占当日总成交额的9.82%,成交价...
中国矿产“家底”揭秘:谁是真正... (转自:矿业俱乐部)导语: 一提到中国矿产,你想到什么?是山西的煤海,还是大庆的油田?长期以来,我们...
大中矿业7月4日现1笔大宗交易...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会!   7月4日,大中矿...
龙虎榜|同辉信息涨8.42%,... 7月4日,同辉信息(维权)涨8.42%,日振幅值达16.04%,日换手率达40.33%,收盘价10....
龙虎榜|柳化股份涨停,开源证券... 7月4日,柳化股份涨停,日振幅值达10.68%,日换手率达14.00%,收盘价3.71元,成交额4....
中安科:为江苏中科智能提供1.... 每经AI快讯,7月4日,中安科公告,为全资子公司江苏中科智能系统有限公司提供1.5亿元人民币的最高额...
阿里健康推出“科学减重标准” ... 中国消费者报北京讯(记者王小月)7月4日,在阿里健康科学减重标准发布会上,北京大学人民医院内分泌科主...
工业园区(杨浦创业园区) 工业... 复襄公社五角场基地园区简介五角场核心商务区,毗邻复旦同济上财大学;开放时尚商圈,科技、文化、创意汇聚...