[Algorithm][动态规划][回文串问题][回文子串][最长回文子串][分割回文串Ⅳ]详细讲解

目录

  • 0.原理讲解
  • 1.回文子串
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 2.最长回文子串
    • 1.题目链接
    • 3.代码实现
  • 3.分割回文串 IV
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现


0.原理讲解

  • 动态规划能够将所有的子串是否是回文的信息,保存在dp表里面
  • 状态表示一般经验:以[i, j]为区间,分析问题

1.回文子串

1.题目链接

  • 回文子串

2.算法原理详解

  • 思路
    • 确定状态表示 -> dp[i][j]的含义

      • s字符串[i, j]的子串,是否是回文串
    • 推导状态转移方程
      请添加图片描述

    • 初始化:无需初始化

    • 确定填表顺序:从下往上

    • 确定返回值:dp表里true的个数


3.代码实现

int countSubstrings(string s) 
{int n = s.size();vector<vector<bool>> dp(n, vector<bool>(n));int ret = 0;for(int i = n - 1; i >= 0; i--){for(int j = i; j < n; j++){if(s[i] == s[j]){dp[i][j] = i + 1 < j ? dp[i + 1][j - 1] : true;if(dp[i][j]){ret++;}}}}return ret;
}

2.最长回文子串

1.题目链接

  • 最长回文子串

  • 按照回文子串的思路解决即可,只不过判断最长时,利用起始下标j - i + 1

  • 思路

    • 确定状态表示 -> dp[i][j]的含义

      • s字符串[i, j]的子串,是否是回文串
    • 推导状态转移方程
      请添加图片描述

    • 初始化:无需初始化

    • 确定填表顺序:从下往上

    • 确定返回值:dp表里值为true的情况下,长度最大的字串的起始位置以及长度


3.代码实现

string longestPalindrome(string s) 
{int n = s.size();vector<vector<bool>> dp(n, vector<bool>(n));int len = 1, begin = 0;for(int i = n - 1; i >= 0; i--){for(int j = i; j < n; j++){if(s[i] == s[j]){dp[i][j] = i + 1 < j ? dp[i + 1][j - 1] : true;if(dp[i][j] && j - i + 1 > len){len = j - i + 1;begin = i;}}}}return s.substr(begin, len);
}

3.分割回文串 IV

1.题目链接

  • 分割回文串 IV

2.算法原理详解

  • 思路梳理

    • 本题思路经处理后,就可以划归为回文子串
    • 可以将本题分为三个区间,其中中间区间就是一个回文子串的始末
    • 先将字符串内所有子串是否是回文串都判断出来,再挨个判断三个区间是否是回文串
      请添加图片描述
  • 预处理:将字符串内所有子串是否是回文串都判断出来

    • 确定状态表示 -> dp[i][j]的含义

      • s字符串[i, j]的子串,是否是回文串
    • 推导状态转移方程
      请添加图片描述

    • 初始化:无需初始化

    • 确定填表顺序:从下往上

  • 结果处理:挨个判断三个区间是否是回文串


3.代码实现

bool checkPartitioning(string s) 
{// 预处理:处理回文信息int n = s.size();vector<vector<bool>> dp(n, vector<bool>(n));for(int i = n - 1; i >= 0; i--){for(int j = i; j < n; j++){if(s[i] == s[j]){dp[i][j] = i + 1 < j ? dp[i + 1][j - 1] : true;}}}// 判断三区间,枚举中间区间for(int i = 1; i < n - 1; i++){for(int j = i; j < n - 1; j++){if(dp[0][i - 1] && dp[i][j] && dp[j + 1][n - 1]){return true;}}}return false;
}

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

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

相关文章

使用explain plan查看执行计划

1. 确保PLAN_TABLE存在 在首次使用 EXPLAIN PLAN 之前&#xff0c;需要确保数据库中存在名为 PLAN_TABLE 的表&#xff0c;用于存储执行计划信息。大多数Oracle环境在安装时会自动创建这个表&#xff0c;但如果没有&#xff0c;可以通过运行 $ORACLE_HOME/rdbms/admin/utlxpla…

Harmony开发 List/Scroll 组件最后一个item显示不全或布局显示不完整

今天在做Harmony开发的时候遇到一个问题,List组件的最后一个item显示不全&#xff0c;如下图&#xff0c;item-9显示不出来&#xff0c;显示了一部分 这个页面的代码结构如下&#xff1a; Column() {Row() {Text(文本1).fontSize(15).fontColor(Color.Black)Text(文本2).font…

基于Vue3的Uniapp实训项目|一家鲜花店

基于Vue的Uniapp实训指导项目 项目预览&#xff1a; 在这里插入图片描述 pages.json {"pages": [ //pages数组中第一项表示应用启动页&#xff0c;参考&#xff1a;https://uniapp.dcloud.io/collocation/pages{"path": "pages/index/index",&…

群体优化算法---蜂群优化算法应用于数据挖掘

介绍 蜂群优化算法&#xff08;Bee Algorithm, BA&#xff09;及其变种主要模拟蜜蜂的觅食行为&#xff0c;以解决复杂的优化问题。这类算法通过蜜蜂之间的信息交流和协作来探索解空间&#xff0c;寻找全局最优解。主要应用于参数优化&#xff0c;结构优化&#xff0c;机器学习…

The First项目报告:去中心化知识产权治理协议MON Protocol如何革新链游产业?

2023年12月&#xff0c;RPG NFT 游戏 Pixelmon 首席执行官 GiulioX 在 X 平台表示&#xff0c;确认将推出代币 MON&#xff0c;代币生成&#xff08;TGE&#xff09;时间将取决于 MON 的路线图和主流 CEX 的启动板队列。12 月 11 日&#xff0c;RPG NFT 游戏 Pixelmon 首席执行…

element-plus的Layout组件

elment-plus的layout组件包括el-row和e-col&#xff0c;和bootstrap的栅格类似&#xff0c;e-row采用flex布局&#xff0c;分成了24个栅栏&#xff0c;单个e-col默认占24,可以通过span属性指定其大小&#xff0c;offset属性指定其偏移的栅栏个数。e-row组件的父组件不要使用dis…

深度学习(三)

5.Functional API 搭建神经网络模型 5.1利用Functional API编写宽深神经网络模型进行手写数字识别 import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom…

Stable diffusion文生图大模型——隐扩散模型原理解析

1、前言 本篇文章&#xff0c;我们将讲这些年非常流行的文生图大模型——Stable Diffusion。该模型也不难&#xff0c;甚至说很简单。创新点也相对较少&#xff0c;如果你学会了我以前的文章讲过的模型&#xff0c;学习这个也自然水到渠成&#xff01; 参考论文&#xff1a;H…

AdminController

目录 1、 AdminController 1.1、 Students 1.2、 StudentDetail 1.3、 EnrolledStudent AdminController using ITM_College.Data; using ITM_College.Models; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace ITM_College.Cont…

大白话说明:k8s-Service资源的理解以及与Ingress Controller 做区分

一、什么是Service? 1、Service只是后段一堆Pod的集合抽象概念而已。 2、当你创建Service资源时会同时创建一个名称为Endpoints的资源对象来List 这些实际的Pod的IP。 二、Service代理流量吗&#xff1f; 1、不代理。 2、实际处理流量是每个节点上的kube-prox…

tomcat-valve通过servlet处理请求

上一节说到请求url定位servlet的过程&#xff0c;tomcat会把请求url和容器的映射关系保存到MappingData中&#xff0c;org.apache.catalina.connector.Request类实现了HttpServletRequest&#xff0c;其中定义了属性mappingDataprotected final MappingData mappingData new M…

腾讯云 TDMQ for Apache Pulsar 多地区高可用容灾实践

作者介绍 林宇强 腾讯云高级工程师 专注于消息队列、API网关、微服务、数据同步等 PaaS 领域。有多年的开发和维护经验&#xff0c;目前在腾讯云从事 TDMQ Pulsar 商业化产品方向的研发工作。 导语 本文将从四个维度&#xff0c;深入剖析 Pulsar 在多可用区高可用领域的容…

大数据—元数据管理

在大数据环境中&#xff0c;元数据管理是确保数据资产有效利用和治理的关键组成部分。元数据是描述数据的数据&#xff0c;它提供了关于数据集的上下文信息&#xff0c;包括数据的来源、格式、结构、关系、质量、处理历史和使用方式等。有效的元数据管理有助于提高数据的可发现…

Amazon云计算AWS(四)

目录 八、其他Amazon云计算服务&#xff08;一&#xff09;快速应用部署Elastic Beanstalk和服务模板CloudFormation&#xff08;二&#xff09;DNS服务Router 53&#xff08;三&#xff09;虚拟私有云VPC&#xff08;四&#xff09;简单通知服务和简单邮件服务&#xff08;五&…

【劲舞团game】

编写《劲舞团》这样的游戏代码是一个复杂的过程&#xff0c;涉及到游戏引擎的使用、图形渲染、物理模拟、音频处理、网络通信等多个方面。以下是一个非常简化的步骤&#xff0c;用于说明如何开始编写一个基于Unity引擎的简单舞蹈游戏&#xff1a; 1. 准备开发环境 下载并安装…

LeetCode刷题之HOT100之全排列

九点半了&#xff0c;做题吧。聊天聊到十一点多哈哈。 1、题目描述 2、逻辑分析 给定一个不重复数组&#xff0c;要求返回所有可能的全排列。这道题跟我上一道题思想一致&#xff0c;都是使用到回溯的算法思想来解决。直接用代码来解释吧 3、代码演示 public List<List&…

MongoDB环境搭建

一.下载安装包 Download MongoDB Community Server | MongoDB 二、双击下载完成后的安装包开始安装&#xff0c;除了以下两个部分需要注意操作&#xff0c;其他直接next就行 三.可视化界面安装 下载MongoDB-compass&#xff0c;地址如下 MongoDB Compass Download (GUI) | M…

Golang | Leetcode Golang题解之第129题求根节点到叶节点数字之和

题目&#xff1a; 题解&#xff1a; type pair struct {node *TreeNodenum int }func sumNumbers(root *TreeNode) (sum int) {if root nil {return}queue : []pair{{root, root.Val}}for len(queue) > 0 {p : queue[0]queue queue[1:]left, right, num : p.node.Left, …

overpass-api 部署(docker)

简介 Overpass是一个用于访问和查询OpenStreetMap&#xff08;OSM&#xff09;数据的开放式数据API和查询语言。OpenStreetMap是一个由社区驱动的免费开放地图项目&#xff0c;用户可以贡献地理数据并使用它来创建自由和开放的地图。 Overpass API提供了一种强大的方式来获取和…

Spire.PDF for .NET【文档操作】演示:在 C# 中向 PDF 文件添加图层

Spire.PDF 完美支持将多页 PDF 拆分为单页。但是&#xff0c;更常见的情况是&#xff0c;您可能希望提取选定的页面范围并保存为新的 PDF 文档。在本文中&#xff0c;您将学习如何通过 Spire.PDF 在 C#、VB.NET 中根据页面范围拆分 PDF 文件。 Spire.PDF for .NET 是一款独立 …