leetcode算法题解(Java版)-16-动态规划(单词包含问题)

摘要: 碰到二叉树的问题,差不多就是深搜、广搜,递归那方面想想了,当然如果要考虑一下空间、时间,还需要进行剪枝和压缩处理。这题比较简单:判断两个树是否相等,可以递归的判断子树是否相等,最后找到边界条件就是是否都为空,都不为空时节点里面的值是否相等。

一、递归

题目描述

Given two binary trees, write a function to check if they are equal or not. 
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.

思路

  • 碰到二叉树的问题,差不多就是深搜、广搜,递归那方面想想了,当然如果要考虑一下空间、时间,还需要进行剪枝和压缩处理。这题比较简单:判断两个树是否相等,可以递归的判断子树是否相等,最后找到边界条件就是是否都为空,都不为空时节点里面的值是否相等。

代码

/*** Definition for binary tree* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
public class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if(p==null&&q==null){return true;}else if(p==null||q==null){return false;}else if(q.val!=p.val){return false;}else{return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);}}
}

二、动态规划

题目描述

Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words. 
For example, given
s ="leetcode",
dict =["leet", "code"]. 
Return true because"leetcode"can be segmented as"leet code".

思路

  • dp的题目,写了几道了。核心无非就是确定dp数组和状态转移方程。这几道题都有明显的特点,那就是dp数组记录的就是所求的答案,所以答案一般都是dp[s.length()]这种形式的。
  • 有了上面的总结,再来看着道题目。要求一串字母是否可以由所给的字典中的单词拼出来,要求返回布尔型。那好,也同时提示我们了dp数组就是记录它的子串是否能满足要求,类型是布尔型:dp[i]表示的是s[0,i-1]这个子串能否满足要求。
  • dp[i]=dp[j]&&s[j,i]是否在字典中(0<=j<=i-1)

代码

import java.util.Set;public class Solution {public boolean wordBreak(String s, Set<String> dict) {if(s==null||s.length()==0||dict==null||dict.size()==0){return false;}boolean [] dp = new boolean [s.length()+2];dp[0] = true;for(int i=1;i<=s.length();i++){for(int j=i-1;j>=0;j--){//从尾部扫描单词if(dp[j]==true&&dict.contains(s.substring(j,i))){dp[i]=true;break;}else{dp[i]=false;}}}return dp[s.length()];}
}

三、深搜

题目描述

Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word. 
Return all such possible sentences. 
For example, given
s ="catsanddog",
dict =["cat", "cats", "and", "sand", "dog"]. 
A solution is["cats and dog", "cat sand dog"].

思路

  • 题目是上一道题的加强版,为了考察动态规划。感觉有点复杂,没想出来怎么在上一道的基础上改进。
  • 深搜可以解决问题!直接看代码了

代码

import java.util.ArrayList;
import java.util.Set;public class Solution {public ArrayList<String> res = new ArrayList<>();public ArrayList<String> wordBreak(String s, Set<String> dict) {dfs(s,s.length(),dict,"");return res;}public void dfs(String s,int index,Set<String> dict,String temp){if(index==0){if(temp.length()>0){res.add(temp.substring(0,temp.length()-1));//如果写成res.add(temp)则末尾会多一个空格,小细节}}for(int i=index-1;i>=0;i--){if(dict.contains(s.substring(i,index))){dfs(s,i,dict,s.substring(i,index)+" "+temp);}}}
}

原文链接

本文为云栖社区原创内容,未经允许不得转载。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php脚本启动,有没有办法启动一个PHP脚本并获得状态?

是否可以使用js在Web服务器上在后台启动php脚本并让它运行,即使您更改页面或根本不访问该站点,如果您第二次调用该php脚本也可以获取当前状态&#xff1f;这个php脚本将处理数小时的数据,每个循环的睡眠时间为X秒/分钟.如果我之前问的是可能的,如果php仅在脚本结束时才生成输出…

Vue中的列表渲染

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Vue中的列表渲染</title><!--引入vue.js库--><script src"../vue.js"></script> </head><body> <d…

kafkatemplate无法注入_Spring-Kafka(三)-KafkaTemplate发送消息及结果回调

我们使用KafkaTemplate.send(String data)这个方法发送消息到Kafka中,显然这个方法并不能满足我们系统的需求,那我们需要查看一下KafkaTemplate所实现的接口,看看还提供了什么方法。 当我们发送消息到Kafka后,我们又怎么去确认消息是否发送成功呢?这就涉及到KafkaTemplate…

Java小白进阶笔记(1)-重新认识Java

摘要&#xff1a; 这是偏头痛杨的第一篇原文链接&#xff0c;其中&#xff0c;在系列的第二篇开头作者布置了十道题&#xff0c;下面是我的回答&#xff08;大多是作者的文章摘录&#xff09;重新开始学习Java了&#xff0c;这也是为了以后找工作考虑。热爱的机器学习就先放一放…

真相!30K拿到互联网大厂offer,网友:我服了!

最近笔者在知乎刷到一个帖子&#xff0c;其中&#xff0c;这条回答让人印象深刻&#xff1a;其实&#xff0c;最近几年人工智能大火&#xff0c;其中深度学习岗位的薪酬爆增&#xff0c;BAT大厂高薪招聘AI人才&#xff0c;收到的简历却寥寥无几&#xff1f;究竟是大厂岗位要求高…

Java小白进阶笔记(2)-变量和数据类型

摘要&#xff1a; 复习Java知识&#xff0c;主要是一边看**偏头痛杨**的博客&#xff0c;一边完成博主布置的任务。这是看[2.偏头痛杨的Java入门教学系列之变量&数据类型篇][1] 的作业复习Java知识&#xff0c;主要是一边看偏头痛杨的博客&#xff0c;一边完成博主布置的任…

组件使用中的细节点02

使用is属性解决bug 页面 Vue根实例中除外 在子组件定义data时&#xff0c;data必须是个函数&#xff0c; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Vue中的列表渲染</title><!--引入…

php对帖子分类,php – MySQL:从类别中获取帖子

我正在尝试学习MySQL,所以我创建了一个小博客系统.我在MysqL中有3个表&#xff1a;帖子&#xff1a;id | title----------------1 | Post Title 12 | Post Title 2类别&#xff1a;id | title | parent--------------------------------10 | category10 | 011 | category11 | 0…

Java小白进阶笔记(3)-初级面向对象

摘要&#xff1a; 继续学习&#xff1a; 4.偏头痛杨的Java入门教学系列之初级面向对象篇继续学习&#xff1a;4.偏头痛杨的Java入门教学系列之初级面向对象篇 分割线中为原文的摘录&#xff1a;面向过程编程&面向对象编程从面向过程到面向对象&#xff0c;不仅仅是编程方式…

鸿蒙 OS 的到来,能为我们改变什么?| 程序员大本营9月刊

作者 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;「鸿蒙初辟原无姓&#xff0c;打破顽空需悟空」&#xff0c;在国产自研操作系统短缺的窘境之下&#xff0c;天惊一声雷&#xff0c;「鸿蒙」踏风来。回首上个月的技术圈&#xff0c;最值得业界浮称流说的…

vue 嵌套表格组件_使用form-create动态生成vue自定义组件和嵌套表单组件

使用form-create动态生成vue自定义组件和嵌套表单组件maker.create通过建立一个虚拟 DOM的方式生成自定义组件生成Makerlet rule [formCreate.maker.create(i-button).props({type:primary,field:btnloading:true})]$f formCreate.create(rule);上面的代码是通过maker生成器动…

注释那些事儿:前端代码质量系列文章(一)

摘要&#xff1a; 好的注释可以提高代码的可读性和可维护性&#xff0c;从而提高代码质量。那么什么是好的注释&#xff1f;如何写出好的注释&#xff1f;“Comment or not comment, that is the question”好的注释可以提高代码的可读性和可维护性&#xff0c;从而提高代码质量…

linux 给普通用户赋予最高权限

文章目录一、创建新用户二、给新用户设置密码三、赋予sudoers文件写的权限四、编辑sudoers文件五、删除sudoers文件写的权限一、创建新用户 useradd know二、给新用户设置密码 passwd know三、赋予sudoers文件写的权限 chmod uw /etc/sudoers四、编辑sudoers文件 vim /etc/…

php裁剪图片并上传源码,改写jcrop插件+php的图片上传实现与裁剪一体化

1.图片上传后立刻判断图片的宽和高是否超过预设的最大高度与宽度&#xff0c;超过了则生成缩略图&#xff0c;2.图片裁剪使用的是jquery的裁剪插件Jcrop,可以实现裁剪的即时预览&#xff0c;代码没有优化&#xff0c;会生成很多垃圾图片&#xff0c;欢迎大家一起改进&#xff0…

人工智能和机器学习的前世今生

摘要&#xff1a; 阅读本文以了解更多关于人工智能、机器学习和深度学习方面的知识&#xff0c;以及它们对商业化意味着什么。如果正确的利用模式识别进行商业预测和决策&#xff0c;那么会为企业带来巨大的利益。机器学习&#xff08;ML&#xff09;研究这些模式&#xff0c;并…

30 岁程序员生活图鉴,怎样算是活成了理想的模样?

戳蓝字“CSDN云计算”关注我们哦&#xff01;文 | 年素清来源 | 程序人生第一批90后已近而立&#xff0c;相信他们中的每个人在年少的时候都曾经憧憬过长大后的图景&#xff1a;做医生当老师做大官&#xff0c;开飞机打怪兽赚大钱……程序员&#xff08;媛&#xff09;们自然也…

pythontuple([1、2、3)_Python 进阶之路 (三) Tuple元组使用指南

比List更安全的数据类型大家好&#xff0c;今天为大家介绍一种更为安全的Python内置数据类型:tuple(元组)&#xff0c;以及它的基础用法元组是什么元组(tuple)是另一种有序的数据类型&#xff0c;与list比较类似。主要不同的一点是tuple被创建后就不能对其进行修改。所以&#…

linux 创建用户和修改新增用户默认的家目录

文章目录一、用户操作①创建新用户②给新用户设置密码③ 默认家目录二、修改默认家目录① 编辑passwd文件② 在下面找到新增的用户③ 把前面的目录(/home/gblfy)修改为(/app/gblfy)三、验证测试①切换用户②查看当前用户目录一、用户操作 ①创建新用户 useradd gblfy②给新用…

深度学习技巧与窍门

摘要&#xff1a; 本文是根据自身构建深度学习模型总结而来&#xff0c;适合有一定深度学习基础的读者阅读。本文是根据自身构建深度学习模型总结而来&#xff0c;可能读起来比较干巴&#xff0c;但干货确实不少。闲话少叙&#xff0c;直接进入相关内容。首先&#xff0c;为什么…

Python库大全(涵盖了Python应用的方方面面),建议收藏留用!

学Python&#xff0c;想必大家都是从爬虫开始的吧。毕竟网上类似的资源很丰富&#xff0c;开源项目也非常多。 Python学习网络爬虫主要分3个大的版块&#xff1a;抓取&#xff0c;分析&#xff0c;存储 当我们在浏览器中输入一个url后回车&#xff0c;后台会发生什么&#xff1…