算法学习:139. 单词拆分

单词拆分

题目链接:力扣题目链接
难度:中等
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。


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


示例 :


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

思路

  1. 引言
    单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满。
  2. 确定dp数组及下标含义
    dp[i] : 字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词。
  3. 确定递推公式
    如果确定dp[j] 是true,且 [j, i] 这个区间的子串出现在字典里,那么dp[i]一定是true。(j < i ),所以递推公式是 if([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] = true。
  4. dp数组如何初始化
    题目中说了“给定一个非空字符串 s” 所以测试数据中不会出现i为0的情况,那么dp[0]初始为true完全就是为了推导公式。下标非0的dp[i]初始化为false,只要没有被覆盖说明都是不可拆分为一个或多个在字典中出现的单词。
  5. 确定遍历顺序
    本题使用求排列的方式,还是求组合的方式都可以。

动态规划(完全背包)

class Solution{
	public boolean wordBreak(String s, List<String> 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(wordDict.contains(s.substring(j,i)) && dp[j]){
					dp[i] = true;	
				}
			}	
		}
		return dp[s.length()];
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
--回答-- 决策树算法: 1.算法介绍: 决策树是一种基本的分类与回归方法,是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果或者回归预测结果。决策树算法通过对数据进行分析,构建决策树模型,从而实现对数据的分类和预测。 2.算法应用: 决策树算法广泛应用于数据挖掘、机器学习、模式识别等领域,如金融风险评估、医学诊断、客户流失预测等。 3.算法步骤: 决策树算法的步骤如下所示: (1)选择最优特征作为当前节点的特征; (2)根据该特征将数据集分为多个子集;(3)对于每个子集,重复步骤(1)和(2),直到所有子集都为同一类别或者达到预定的树的深度; (4)构建决策树。 4.算法的优缺点: 决策树算法的优点包括易于理解和解释、计算复杂度较低、能够处理缺失数据等;缺点包括容易出现过拟合、对于连续性的字段比较难预测等。 k近邻算法: 1.算法介绍: k近邻算法是一种基于实例的学习方法,它通过计算不同样本之间的距离,找到与目标样本最近的k个样本,然后根据这k个样本的类别进行分类或者回归预测。 2.算法应用: k近邻算法广泛应用于数据挖掘、模式识别、图像处理等领域,如手写数字识别、人脸识别、推荐系统等。 3.算法步骤: k近邻算法的步骤如下所示: (1)计算测试样本与训练样本之间的距离; (2)选取距离最近的k个样本; (3)根据这k个样本的类别进行分类或者回归预测。 4.算法的优缺点: k近邻算法的优点包括简单易用、对于异常值不敏感等;缺点包括计算复杂度高、需要大量的存储空间等。 k近邻算法的应用: k近邻算法可以应用于分类问题和回归问题,如手写数字识别、人脸识别、推荐系统等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

As_theWind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值