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

day57|● 647. 回文子串 ● 516.最长回文子序列

647. 回文子串

https://leetcode.cn/problems/palindromic-substrings/solution/by-lfool-2mvg/

Given a string s, return the number of palindromic substrings in it.
A string is a palindrome when it reads the same backward as forward.
A substring is a contiguous sequence of characters within the string.

dp[i][j] 表示子串 [i…j] 是否为回文子串

当我们判断 [i…j] 是否为回文子串时,只需要判断 s[i] == s[j],同时判断 [i-1…j-1] 是否为回文子串即可

需要注意有两种特殊情况:[i, i] or [i, i + 1],即:子串长度为 1(s = “a”) 或者 2 (s = “aa”)。所以加了一个条件限定 j - i < 2

状态转移方程如下:

dp[i][j] = (s[i] == s[j]) && (j - i < 2 || dp[i + 1][j - 1])

初始化默认为不匹配,false。

这里注意遍历顺序,因为dp[i][j]是由dp[i+1][j-1]来判断是不是回文子串,所以i应当从大到小,j从小到大。
所以一定要从下到上,从左到右遍历,这样保证dp[i + 1][j - 1]都是经过计算的。
在这里插入图片描述

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

中心扩散法
center expansion

private int ans = 0;
public int countSubstrings(String s) {for (int i = 0; i < s.length(); i++) {// 以单个字母为中心的情况isPalindromic(s, i, i);// 以两个字母为中心的情况isPalindromic(s, i, i + 1);}return ans;
}
private void isPalindromic(String s, int i, int j) {while (i >= 0 && j < s.length()) {if (s.charAt(i) != s.charAt(j)) return ;i--;j++;ans++;}
}

在这里插入图片描述

516.最长回文子序列

https://leetcode.cn/problems/longest-palindromic-subsequence/solution/zi-xu-lie-wen-ti-tong-yong-si-lu-zui-chang-hui-wen/

Given a string s, find the longest palindromic subsequence’s length in s.
A subsequence is a sequence that can be derived from another sequence by deleting some or no elements without changing the order of the remaining elements.

Input: s = “bbbab”
Output: 4
Explanation: One possible longest palindromic subsequence is “bbbb”.

注意区分子串和子序列:
回文子串是要连续的,回文子序列可不是连续的!

在子串 s[i…j] 中,最长回文子序列的长度为 dp[i][j]。

求dp[i][j], 假设已知子问题dp[i+1][j-1]的值,
只要s[i] = s[j],那么它俩加上 s[i+1…j-1] 中的最长回文子序列就是 s[i…j] 的最长回文子序列。
如果s[i]与s[j]不相同,说明s[i]和s[j]的同时加入 并不能增加[i,j]区间回文子序列的长度,
或者说如果 s[i] ≠ s[j],则 s[i] 和 s[j] 不可能同时作为同一个回文子序列的首尾,
那么分别加入s[i]、s[j]看看哪一个可以组成最长的回文子序列。
在这里插入图片描述
遍历顺序:必须从下到上,从左到右
在这里插入图片描述

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

相关文章:

day57|● 647. 回文子串 ● 516.最长回文子序列

647. 回文子串 https://leetcode.cn/problems/palindromic-substrings/solution/by-lfool-2mvg/ Given a string s, return the number of palindromic substrings in it. A string is a palindrome when it reads the same backward as forward. A substring is a contiguous…...

docker compose.yml学习

docker compose 安装docker-compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composechmod x /usr/local/bin/docker-composeln -s /usr/local/bin/docker-…...

【业务功能篇55】Springboot+easyPOI 导入导出

Apache POI是Apache软件基金会的开源项目&#xff0c;POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 Apache POI 代码实现复杂&#xff0c;学习成本较高。 Easypoi 功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出…...

对顶堆算法

对顶堆可以动态维护一个序列上的第k大的数&#xff0c;由一个大根堆和一个小根堆组成&#xff0c; 小根堆维护前k大的数(包含第k个)大根堆维护比第k个数小的数 [CSP-J2020] 直播获奖 题目描述 NOI2130 即将举行。为了增加观赏性&#xff0c;CCF 决定逐一评出每个选手的成绩&a…...

node.js的优点

提示&#xff1a;node.js的优点 文章目录 一、什么是node.js二、node.js的特性 一、什么是node.js 提示&#xff1a;什么是node.js? Node.js发布于2009年5月&#xff0c;由Ryan Dahl开发&#xff0c;是一个基于ChromeV8引擎的JavaScript运行环境&#xff0c;使用了一个事件驱…...

golang编译跨平台

golang可以在windows上编译出linux、MacOS等系统上的程序。 go编译器windows下可变翼linux程序&#xff0c;例如&#xff0c;GOARCHamd64 和 GOOSlinux 可以用于编译 64 位的 Linux 平台上的可执行文件。&#xff1a; set GOARCHamd64 set GOOSlinux go build main.go通过设置…...

关于Spring的bean的相关注解以及其简单使用方法

一、前置工作 第一步&#xff1a;创建一个maven项目 第二步&#xff1a;在resource中创建一个名字叫做spring-config.xml的文件&#xff0c;并把以下代码复制粘贴 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.sprin…...

【计算机视觉】BLIP:源代码示例demo(含源代码)

文章目录 一、Image Captioning二、VQA三、Feature Extraction四、Image-Text Matching 一、Image Captioning 首先配置代码&#xff1a; import sys if google.colab in sys.modules:print(Running in Colab.)!pip3 install transformers4.15.0 timm0.4.12 fairscale0.4.4!g…...

TWILIGHT靶场详解

TWILIGHT靶场详解 下载地址&#xff1a;https://download.vulnhub.com/sunset/twilight.7z 这是一个比较简单的靶场&#xff0c;拿到IP后我们扫描发现开启了超级多的端口 其实这些端口一点用都没有&#xff0c;在我的方法中 但是也有不同的方法可以拿权限&#xff0c;就需要…...

【案例】--GPT衍生应用案例

目录 一、前言二、GPT实现智能问答架构2.1、基本的GPT实现智能问答架构2.2、可应用的GPT实现智能问答架构1、语义转换2、相似度关键字矩阵3、ES中搜索相似度关键字矩阵三、后续一、前言 GPT,全称Generative Pre-trained Transformer ,中文名可译作生成式预训练Transformer。…...

Sip网络音频对讲广播模块, sip网络寻呼话筒音频模块

Sip网络音频对讲广播模块&#xff0c; sip网络寻呼话筒音频模块 一、模块介绍 SV-2101VP和 SV-2103VP网络音频对讲广播模块 是一款通用的独立SIP音频功能模块&#xff0c;可以轻松地嵌入到OEM产品中。该模块对来自网络的SIP协议及RTP音频流进行编解码。 该模块支持多种网络协议…...

leetcode1219. 黄金矿工(java)

黄金矿工 leetcode1219. 黄金矿工题目描述回溯算法代码 回溯算法 leetcode1219. 黄金矿工 难度: 中等 eetcode 1219 黄金矿工 题目描述 你要开发一座金矿&#xff0c;地质勘测学家已经探明了这座金矿中的资源分布&#xff0c;并用大小为 m * n 的网格 grid 进行了标注。每个单元…...

Svelte框架入门

关键词 前端框架、编译器、响应式、模板 介绍 Svelte /svelt/ adj. 苗条的&#xff1b;线条清晰的&#xff1b;和蔼的 Svelte是一个前端组件框架&#xff0c;就像它的英文名字一样&#xff0c;Svelte的目标是打造一个更高性能的响应性前端框架。 Svelte类似于React和Vue框架&am…...

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程

在某鱼上找了一个友善之臂的Tiny6410开发板用来体验一下嵌入式开发。这次先体验一下裸机程序的开发流程&#xff0c;由于这个开发板比较老旧了&#xff0c;官方文档有很多过期的内容&#xff0c;所以记录一下整个过程。 1. 交叉编译器安装 按照光盘A中的文档《04- Tiny6410 L…...

SpringBoot实战(二十三)集成 SkyWalking

目录 一、简介二、拉取镜像并部署1.拉取镜像2.运行skywalking-oap容器3.运行skywalking-ui容器4.访问页面 三、下载解压 agent1.下载2.解压 四、创建 skywalking-demo 项目1.Maven依赖2.application.yml3.DemoController.java 五、构建启动脚本1.startup.bat2.执行启动脚本3.发…...

深度学习实践——卷积神经网络实践:裂缝识别

深度学习实践——卷积神经网络实践&#xff1a;裂缝识别 系列实验 深度学习实践——卷积神经网络实践&#xff1a;裂缝识别 深度学习实践——循环神经网络实践 深度学习实践——模型部署优化实践 深度学习实践——模型推理优化练习 深度学习实践——卷积神经网络实践&#xff…...

linux | vscode | makefile | c++编译和调试

简单介绍环境&#xff1a; vscode 、centos、 gcc、g、makefile 简单来说就是&#xff0c;写好项目然后再自己写makefile脚本实现编译。所以看这篇博客的用户需要了解gcc编译的一些常用命令以及makefile语法。在网上看了很多教程&#xff0c;以及官网也看了很多次&#xff0c;最…...

Spring | Bean 作用域和生命周期

一、通过一个案例来看 Bean 作用域的问题 Spring 是用来读取和存储 Bean&#xff0c;因此在 Spring 中 Bean 是最核心的操作资源&#xff0c;所以接下来我们深入学习⼀下 Bean 对象 假设现在有⼀个公共的 Bean&#xff0c;提供给 A 用户和 B 用户使用&#xff0c;然而在使用的…...

培训(c++题解)

题目描述 某培训机构的学员有如下信息&#xff1a; 姓名&#xff08;字符串&#xff09;年龄&#xff08;周岁&#xff0c;整数&#xff09;去年 NOIP 成绩&#xff08;整数&#xff0c;且保证是 5 的倍数&#xff09; 经过为期一年的培训&#xff0c;所有同学的成绩都有所提…...

ansible-playbook编写 lnmp 剧本

ansible-playbook编写 lnmp 剧本 vim /opt/lnmp/lnmp.yaml执行剧本 ansible-playbook lnmp.yaml...

OpenClaw对话日志分析:Qwen3.5-9B优化任务执行成功率

OpenClaw对话日志分析&#xff1a;Qwen3.5-9B优化任务执行成功率 1. 问题背景与数据准备 去年开始使用OpenClaw对接Qwen3.5-9B模型时&#xff0c;我发现一个有趣现象&#xff1a;同样的自动化任务&#xff0c;在不同时段执行成功率波动很大。有时能完美完成文件整理和邮件发送…...

还在为PDF表格提取而头疼?这个Python神器让你三行代码搞定!

还在为PDF表格提取而头疼&#xff1f;这个Python神器让你三行代码搞定&#xff01; 【免费下载链接】tabula-py Simple wrapper of tabula-java: extract table from PDF into pandas DataFrame 项目地址: https://gitcode.com/gh_mirrors/ta/tabula-py 你是否曾经面对P…...

硬件加速方案:OpenClaw调用SecGPT-14B时的vLLM优化配置

硬件加速方案&#xff1a;OpenClaw调用SecGPT-14B时的vLLM优化配置 1. 为什么需要vLLM优化 去年我在本地部署SecGPT-14B时遇到了一个尴尬的问题——我的RTX 3090显卡只有24GB显存&#xff0c;而模型加载后显存直接爆满&#xff0c;连最简单的推理都无法完成。这促使我开始研究…...

Thorium浏览器深度解析:如何打造比Chromium快30%的高性能浏览器?

Thorium浏览器深度解析&#xff1a;如何打造比Chromium快30%的高性能浏览器&#xff1f; 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Source code and Linux releases. Windows/MacOS/ARM builds served in different repos, links are t…...

(96页PPT)新员工入职专题安全教育(附下载方式)

篇幅所限&#xff0c;本文只提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/AI_data_cloud/89624194 资料解读&#xff1a;《新员工入职专题安全教育》 详细资料请看本解读文章的最后内容。 新员工是企业发展的新鲜血液&#xff0c;…...

Wan2.2-I2V-A14B镜像安全加固:禁用root登录+API密钥认证+访问白名单

Wan2.2-I2V-A14B镜像安全加固&#xff1a;禁用root登录API密钥认证访问白名单 1. 镜像安全加固的必要性 Wan2.2-I2V-A14B作为高性能文生视频模型&#xff0c;其私有部署镜像承载着重要的AI推理任务。在开放网络环境中运行时&#xff0c;系统安全防护不容忽视。未经加固的镜像…...

千问图像生成16Bit(Qwen-Turbo-BF16)GPU利用率提升50%:BF16数值稳定性实证

千问图像生成16Bit&#xff08;Qwen-Turbo-BF16&#xff09;GPU利用率提升50%&#xff1a;BF16数值稳定性实证 基于 Qwen-Image-2512 底座与 Wuli-Art Turbo LoRA 构建的高性能、极速图像生成 Web 系统。 在AI图像生成领域&#xff0c;精度选择一直是性能与质量之间的关键权衡。…...

如何解决Cats类型推导难题:SI-2712修复与部分统一完整指南

如何解决Cats类型推导难题&#xff1a;SI-2712修复与部分统一完整指南 【免费下载链接】cats Lightweight, modular, and extensible library for functional programming. 项目地址: https://gitcode.com/gh_mirrors/ca/cats Cats是一个轻量级、模块化且可扩展的函数式…...

保姆级教程:用llama.cpp把魔塔社区的safetensors模型转成Ollama能用的GGUF格式

从魔塔社区到Ollama&#xff1a;零基础完成safetensors到GGUF的华丽转身 刚接触开源大模型的新手们&#xff0c;往往会在魔塔社区发现令人心动的模型——比如最近热门的DeepSeek-R1系列。但下载后却面临一个尴尬局面&#xff1a;这些模型通常是safetensors格式&#xff0c;而Ol…...

MinerU智能文档理解服务:专为高密度文本图像设计的轻量级解决方案

MinerU智能文档理解服务&#xff1a;专为高密度文本图像设计的轻量级解决方案 1. 引言&#xff1a;文档处理的智能化革命 在数字化办公时代&#xff0c;我们每天都要面对大量PDF文档、扫描件和图像资料。这些文件往往包含复杂的版面结构&#xff1a;多栏排版、嵌套表格、数学…...