当前位置: 首页 > news >正文

力扣爆刷第133天之动态规划收尾(距离编辑与回文子串)

力扣爆刷第133天之动态规划收尾(距离编辑与回文子串)

文章目录

      • 力扣爆刷第133天之动态规划收尾(距离编辑与回文子串)
      • 一、72. 编辑距离
      • 二、647. 回文子串
      • 三、516. 最长回文子序列

一、72. 编辑距离

题目链接:https://leetcode.cn/problems/edit-distance/description/
思路:本题也是前面重复子序列的变体,可以对字符串进行增删替换操作,其中增加和删除是一样的,而替换依赖的是前一个位置。
定义dp[i][j]表示以下标i为结尾的word1和以下标j为结尾的word2要相等所需要的操作。
如果word1[i] == word2[j],那么所需次数依赖于word1[i-1]和word2[j-1],即dp[i][j] = dp[i-1][j-1]。
如果word1[i] != word2[j],那么增删对应的都是dp[i-1][j],dp[i][j-1],替换对应的是dp[i-1][j-1],取三者最低。

class Solution {public int minDistance(String word1, String word2) {int m = word1.length(), n = word2.length();int[][] dp = new int[m+1][n+1];for(int i = 0; i <= m; i++) dp[i][0] = i;for(int i = 0; i <= n; i++) dp[0][i] = i;for(int i = 0; i < m; i++) {for(int j = 0; j < n; j++) {if(word1.charAt(i) == word2.charAt(j)) {dp[i+1][j+1] = dp[i][j];}else{dp[i+1][j+1] = Math.min(Math.min(dp[i+1][j], dp[i][j+1]), dp[i][j]) + 1;}}}return dp[m][n];}
}

二、647. 回文子串

题目链接:https://leetcode.cn/problems/palindromic-substrings/description/
思路:
常规做法:本题求回文子串的个数,子串是要求连续的,我们可以从单点和双点,向字符串两段遍历,并且记录下子串的个数。
也可以使用动态规划,定义dp[i][j]表示,区间s[i,j]是回文子串,dp[i][j]依赖于dp[i+1][j-1],也就是当前位置的左下方。

class Solution {public int countSubstrings(String s) {int sum = 0;for(int i = 0; i < s.length(); i++) {sum += countSum(s, i, i);sum += countSum(s, i, i+1);}return sum;}int countSum(String s, int i, int j) {int count = 0;while(i >= 0 && j < s.length()) {if(s.charAt(i) == s.charAt(j)) {count++;i--;j++;}else{break;}}return count;}}

动态规划解法:

class Solution {public int countSubstrings(String s) {int len = s.length(), sum = 0;boolean[][] dp = new boolean[len][len];for(int i = len-1; i >= 0; i--) {for(int j = i; j < len; j++) {if(s.charAt(i) == s.charAt(j) && (j-i<=2 || dp[i+1][j-1])) {dp[i][j] = true;sum++;}}}return sum;}
}

三、516. 最长回文子序列

题目链接:https://leetcode.cn/problems/longest-palindromic-subsequence/
思路:上一题求的是回文子串的个数,本题求的是回文子序列的长度,一个连续一个不连续。定义dp[i][j]表示区间[i, j]中的最长回文子序列的长度是dp[i][j],例如a b b b a的长度依赖于 bbb中回文子序列的长度,所以遍历的方式是从下往下,从左往右。s[i] = s[j]时依赖于左下角的元素dp[i][j] = dp[i+1][j-1],s[i] != s[j]时,就类似于a b b b 或者 b b b a,即dp[i][j] = Math.max(dp[i][j-1], dp[i+1][j]);

class Solution {public int longestPalindromeSubseq(String s) {int len = s.length();int[][] dp = new int[len][len];for(int i = 0; i < len; i++) dp[i][i] = 1;for(int i = len-1; i >= 0; i--) {for(int j = i+1; j < len; j++) {if(s.charAt(i) == s.charAt(j)) {dp[i][j] = dp[i+1][j-1] + 2;}else{dp[i][j] = Math.max(dp[i][j-1], dp[i+1][j]);}}}return dp[0][len-1];}
}

相关文章:

力扣爆刷第133天之动态规划收尾(距离编辑与回文子串)

力扣爆刷第133天之动态规划收尾&#xff08;距离编辑与回文子串&#xff09; 文章目录 力扣爆刷第133天之动态规划收尾&#xff08;距离编辑与回文子串&#xff09;一、72. 编辑距离二、647. 回文子串三、516. 最长回文子序列 一、72. 编辑距离 题目链接&#xff1a;https://l…...

List集合中对asList的使用

List<String> sArrays.asList(“qwe”,”cvb”,”mnb”); List<String> s1s.subList(1,2); System.out.Pintln(“s”);//输出结果&#xff1a;[qwe,cvb,mnb] System.out.Pintln(“s1”);//输出结果&#xff1a;[cvb] s1.add(“123qwe”);//报错&#xff1a;java…...

软件测试所有测试方法

β测试_Beta测试 β测试&#xff0c;英文是Beta testing。又称Beta测试&#xff0c;用户验收测试&#xff08;UAT&#xff09;。 β测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场&#xff0c;Beta测试不能由程序员或测试员完成。 …...

linux 下 /usr/local的作用

在Linux系统中&#xff0c;/usr/local目录扮演着特定的角色&#xff0c;它是为用户自安装的软件提供一个标准位置。以下是/usr/local目录的主要用途和特点&#xff1a; 用户级程序目录&#xff1a;该目录用于存放用户自行编译安装的软件或者第三方应用程序&#xff0c;区别于操…...

【web网页制作】html+css旅游家乡河南开封主题网页制作(4页面)【附源码】

HTMLCSS家乡河南主题网页目录 &#x1f354;涉及知识&#x1f964;写在前面&#x1f367;一、网页主题&#x1f333;二、页面效果Page1 首页Page2 开封游玩Page 3 开封美食Page4 留言 &#x1f308; 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 &#x1f40b;四…...

MySQL用命令行导出数据库

问题&#xff1a; 交作业的时候要求交数据文件&#xff0c;因为用的MySQL数据库&#xff0c;就在想怎么用命令行导出数据库&#xff0c;在csdn上找了其他文章&#xff0c;使用MySQL的命令行用下面语句&#xff0c;结果发生报错 mysqldump -u 用户名 -p 数据库名 > 输出地址…...

uniapp video 层级覆盖

层级覆盖 cover-view组件 我这里做了个判断 监听全屏时隐藏按钮 根据项目需求自行更改...

SparkSQL概述

1.1. SparkSQL介绍 SparkSQL&#xff0c;就是Spark生态体系中的构建在SparkCore基础之上的一个基于SQL的计算模块。SparkSQL的前身不叫SparkSQL&#xff0c;而是叫做Shark。最开始的时候底层代码优化、SQL的解析、执行引擎等等完全基于Hive&#xff0c;总是Shark的执行速度要比…...

docker 和 docker-compose

Docker是一种开源的容器化平台&#xff0c;它可以帮助开发人员将应用程序及其所有依赖项打包到一个独立的、可移植的容器中。这意味着您可以在任何地方运行Docker容器&#xff0c;而不需要担心环境差异或依赖项的问题。 Docker Compose是Docker官方提供的一个工具&#xff0c;…...

微信小程序支付(完整版)-ThinkPHP/Uniapp

技术说明 1.前端&#xff1a;uniapp、vue3 2.接口&#xff1a;PHP8、ThinkPHP8、MySQL8.0 3.微信支付- PHP&#xff0c;官方示例文档 4.示例代码的模型及业务自己进行调整&#xff0c;不要一味的复制粘贴&#xff01;&#xff01;&#xff01; 流程说明 1.小程序调用接口…...

同时安装多个nodejs版本可切换使用,或者用nvm管理、切换nodejs版本(两个详细方法)

目录 一.使用nvm的方法&#xff1a; 1.卸载nodejs 2.前往官网下载nvm 3.安装nvm 4.查看安装是否完成 5.配置路径和淘宝镜像 6.查看和安装各个版本的nodejs 7.nvm的常用命令 二.不使用nvm&#xff0c;安装多个版本&#xff1a; 1.安装不同版本的nodejs 2.解压到你想放…...

马化腾用了一年多的时间,告诉所有人,视频号小店是新风口!

大家好&#xff0c;我是电商笨笨熊 当腾讯说出自己要做电商的时候&#xff0c;所有人都在说&#xff0c;根本不可能&#xff1b; 甚至在视频号小店正式推出之后&#xff0c;依旧有人说&#xff0c;腾讯做电商就是笑话&#xff1b; 一个“抄”过来的项目&#xff0c;毫无特色…...

代码随想录算法训练营第36期DAY19

DAY19 104二叉树的最大深度 根节点的高度就是最大深度。 非递归法&#xff1a; /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) …...

C#图像:1.图像区域分割与提取

&#xff08;1&#xff09;创建一个名为SplitImage的窗体的应用程序&#xff0c;将窗体改名为FormSplitImage。 &#xff08;2&#xff09;创建一个名为ImageProcessingLibrary的类库程序&#xff0c;为该工程添加名为ImageProcessing的静态类 &#xff08;3&#xff09;为Imag…...

炸弹使用技巧

掼蛋掼蛋&#xff0c;打的就是炸弹。炸弹是指掼蛋中由4-8张相同牌点的牌组成的牌型&#xff0c;需要注意的是&#xff1a;每局牌中都有两张红桃的牌型为逢人配&#xff0c;可以配除了大小王以外的任意牌&#xff0c;因此掼蛋中牌数最多的炸弹可以达到10张。 两副扑克牌中&#…...

SpringAop详解

文章目录 一、Spring自定义注解1、什么是注解&#x1f468;‍&#x1f3eb;2、注解的目的或作用&#x1f49e;3、JDK内置注解&#x1f4ab; 【内置元注解 一共八个固定注解】4、元注解 &#x1f3af;5、自定义注解&#x1f4f8;5、Java反射API和类加载过程51、什么是反射基本原…...

对XYctf的一些总结

对XYctf的一些总结 WEB 1.http请求头字段 此次比赛中出现的&#xff1a; X-Forwarded-For/Client-ip&#xff1a;修改来源ip via&#xff1a;修改代理服务器 还有一些常见的字段&#xff1a; GET&#xff1a;此方法用于请求指定的资源。GET请求应该安全且幂等&#xff0c…...

Visual Studio和Visual Studio Code适用于哪些编程语言

Visual Studio和Visual Studio Code都适用于多种编程语言&#xff0c;它们的适用编程语言如下&#xff1a; Visual Studio适用于&#xff1a; C#Visual Basic .NETF#CJavaScriptTypeScriptPythonHTML/CSSJava&#xff08;通过插件支持&#xff09; Visual Studio Code适用于…...

缓存菜品操作

一&#xff1a;问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大。 二&#xff1a;实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; 每个分…...

达梦数据库常用命令整理

1.数据库自身信息 1.1 查询实例信息 SQL> select name inst_name from v$instance;行号 INST_NAME ---------- --------- 1 DMSERVER已用时间: 11.211(毫秒). 执行号:15.1.2 查询数据库当前状态 SQL> select status$ from v$instance;行号 STATUS$ -…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...