力扣5. 最长回文子串(双指针、动态规划)

Problem: 5. 最长回文子串

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

题目描述

在这里插入图片描述

思路

思路1:双指针

1.我们利用双指针中间向两边扩散来判断是否为回文串,则关键是找到以s[i]为中心的回文串;
2.我们编写一个函数string palindrome(string &s, int left, int right)用于返回以索引为i作为中心向两边的的回文子串
3.由于可能出现
奇数或者偶数长度的回文串
,所以我们需要在遍历时,求出**palindrome(s, i, i)palindrome(s, i, i + 1)**的回文串,并取出其中的较大值

思路2:动态规划

1.状态定义:dp[i][j]表示s[i…j]是回文字符串(定义为bool类型若为true则表示是回文串);
2.状态初始化:所有长度为0的均为回文串,即dp[i][i] == true;
3.状态转移:若s[i] != s[j],则dp[i][j] == false,若s[i] = s[j],则dp[i][j] = dp[i + 1][j - 1]

复杂度

思路1:
时间复杂度:

O ( N 2 ) O(N^2) O(N2);其中 N N N为字符串的长度

空间复杂度:

O ( N ) O(N) O(N)

思路2:
时间复杂度:

O ( N 2 ) O(N^2) O(N2);其中 N N N为字符串的长度

空间复杂度:

O ( N 2 ) O(N^2) O(N2)

Code

思路1:

class Solution {
public:/*** Two pointer** @param s Given string* @return string*/string longestPalindrome(string s) {string res;for (int i = 0; i < s.size(); ++i) {// Longest callback substring centered on s[i] (odd)string s1 = palindrome(s, i, i);// Longest palindromic string centered on s[i] and s[i + 1] (even number)string s2 = palindrome(s, i, i + 1);res = res.size() > s1.size() ? res : s1;res = res.size() > s2.size() ? res : s2;}return res;}/*** Gets the longest palindrome string between [left,right]** @param s Given string* @param left Left pointer* @param right Right pointer* @return string*/string palindrome(string &s, int left, int right) {while (left >= 0 && right < s.size() && s.at(left) == s.at(right)) {left--;right++;}return s.substr(left + 1, right - left - 1);}
};

思路2:

class Solution {
public:/*** Dynamic programming** @param s Given string* @return string*/string longestPalindrome(string s) {int len = s.length();if (len < 2) {return s;}int maxLen = 1;int begin = 0;// dp[i][j] Indicates whether s[i..j] is a palindrome stringvector<vector<bool>> dp(len, vector<bool>(len));for (int i = 0; i < len; ++i) {dp[i][i] = true;}for (int L = 2; L <= len; ++L) {// Initialization: All substrings of length 1 are palindromesfor (int l = 0; l < len; ++l) {// L and l can determine the right boundary, that is, r - l + 1 = Lint r = L + l - 1;// If the right boundary is out of bounds, you can exit the current loopif (r >= len) {break;}if (s.at(l) != s.at(r)) {dp[l][r] = false;} else {if (r - l < 3) {dp[l][r] = true;} else {dp[l][r] = dp[l + 1][r - 1];}}// As long as dp[i][L] == true is true, it means that// the substring s[i..L] is a palindrome,// in which case the palindrome length and starting position are recordedif (dp[l][r] && r - l + 1 >= maxLen) {maxLen = r - l + 1;begin = l;}}}return s.substr(begin, maxLen);}
};

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

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

相关文章

复盘昨天的内容

vue调节css 后端做业务处理 1.分类管理 GetMapping("/queryCtc")public ApiResult queryCtc(){return ctcService.queryCtc();}/*** 修改类目信息* return*/PutMapping("/updateCtc")public ApiResult updateCtc(RequestBody ShopCtc shopCtc){return c…

【论文阅读】基于人工智能目标检测与跟踪技术的过冷流沸腾气泡特征提取

Bubble feature extraction in subcooled flow boiling using AI-based object detection and tracking techniques 基于人工智能目标检测与跟踪技术的过冷流沸腾气泡特征提取 期刊信息&#xff1a;International Journal of Heat and Mass Transfer 2024 级别&#xff1a;EI检…

硬件监控:使用ipmitool实现Linux系统下对服务器硬件监控

一、监控背景 运维人员对服务器硬件监控主要通过主机人员日常巡检&#xff0c;以及zabbix监控。zabbix监控仅限于服务器CPU、内存故障等导致宕机或者重启从而触发主机状态告警&#xff0c;单个磁盘挂载文件系统因坏盘导致文件系统读写异常&#xff0c;其他情况下zabbix很难监控…

Vue3.0+vue-router 实现权限路由方案一

定义路由 const routes[{path: /page,name: "dashboard",redirect: /page/home,meta: {title: "首页",},component: () > import(/components/layout/index.vue),children: [{path: home,name: "home",meta: {title: "仪表盘",ro…

MongoDB之MongoDBConnectorBI安装与使用

MongoDB之MongoDBConnectorBI安装与使用 文章目录 MongoDB之MongoDBConnectorBI安装与使用1. What is the MongoDB Connector for BI?1. 官网2. 是什么&#xff1f;3. 主要功能和作用4. 应用用场景 2. 安装及说明1. 前提条件2. 在Windows下的安装3.启动与运行1. 配置2. 启动mo…

计算机网络:路由协议

路由协议简介 路由协议是计算机网络中不可或缺的一部分&#xff0c;它们负责确定数据包从源地址到目的地址的最佳路径。想象一下&#xff0c;如果你是一个数据包&#xff0c;路由协议就像是地图或导航工具&#xff0c;指导你如何到达目的地。 目录 路由协议简介 工作原理简化…

开源大模型LLM大爆发,数据竞赛已开启!如何使用FuseLLM实现大语言模型的知识融合?

开源大模型LLM大爆发&#xff0c;数据竞赛已开启&#xff01;如何使用FuseLLM实现大语言模型的知识融合&#xff1f; 现在大多数人都知道LLM是什么&#xff0c;以及可以做什么。 人们讨论着它的优缺点&#xff0c;畅想着它的未来&#xff0c; 向往着真正的AGI&#xff0c;又有…

prometheus告警

alter 告警 下载解压安装 wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz tar -zxvf alertmanager-0.26.0.linux-amd64.tar.gz -C /usr/local mv alertmanager-0.26.0.linux-amd64 alertmanager配置起启…

Vue插件之Plugins

插件 (Plugins) 是一种能为 Vue 添加全局功能的工具代码。 通过 app.component() 和 app.directive() 注册一到多个全局组件或自定义指令。 通过 app.provide() 使一个资源可被注入进整个应用。 向 app.config.globalProperties 中添加一些全局实例属性或方法 一个可能上述三种…

Element UI组件安装使用会了吗?

Element UI 是一套基于 Vue.js 构建的开源 UI 组件库&#xff0c;它提供了丰富且易于使用的 UI 组件&#xff0c;能够帮助开发者快速搭建企业级的页面。以下是详细的 Element UI 组件安装及使用步骤&#xff1a; 安装 Element UI 方法一&#xff1a;使用 npm 安装 适用于 No…

Qt程序设计-仪表盘自定义控件实例

本文讲解Qt仪器表盘自定义控件实例。 效果如下 创建仪表表盘类 #ifndef DIALPLATE_H #define DIALPLATE_H#include <QWidget> #include <QTimer> #include <QPainter> #include <QPen> #include <QDebug> #include <QtMath> #include &l…

程序员就业数据分析,需要掌握python哪些知识?

程序员就业数据分析是一项综合性的工作&#xff0c;涉及到多个方面的知识和技能。Python 是一种功能强大的编程语言&#xff0c;被广泛应用于数据分析领域。要进行程序员就业数据分析&#xff0c;你需要掌握一系列与 Python 相关的知识。 1. Python 基础知识 基本语法和数据类…

序列化-反序列化--json-xml-protoBuf

序列化和反序列化 数据在网络中传输需要按照一定的规范组成。这些规定的规范有json,xml,protobuf。 序列化 也就是说数据需要通过网络传输时&#xff0c;需要把数据转化为需要的传输格式&#xff0c;所以需要把需要传输的数据生成json或者xml或者protobuf语言格式文件&#…

【论文阅读】基于图像处理和卷积神经网络的板式换热器气泡识别与跟踪

Bubble recognizing and tracking in a plate heat exchanger by using image processing and convolutional neural network 基于图像处理和卷积神经网络的板式换热器气泡识别与跟踪 期刊信息&#xff1a;International Journal of Multiphase Flow 2021 期刊级别&#xff1a;…

IDEA中 @SpringBootApplication 多个注解无法引入依赖

终于解决了&#xff01;&#xff01;&#xff01; cd到报红项目的根目录&#xff0c;然后输入mvn idea:idea就行了。

2024022701-信息安全(二)——密码学

密码学的基本概念 密码学(Cryptology)&#xff1a; 研究信息系统安全保密的科学。 密码编码学(Cryptography)&#xff1a; 研究对信息进行编码,实现对信息的隐蔽。 密码分析学(Cryptanalytics) &#xff1a; 研究加密消息的破译或消息的伪造。 消息被称为明文(Plaintext)。 用…

windows安装部署node.js并搭建Vue项目

一、官网下载安装包 官网地址&#xff1a;https://nodejs.org/zh-cn/download/ 二、安装程序 1、安装过程 如果有C/C编程的需求&#xff0c;勾选一下下图所示的部分&#xff0c;没有的话除了选择一下node.js安装路径&#xff0c;直接一路next 2、测试安装是否成功 【winR】…

Docker(运维工具)—— 学习笔记

快速构建、运行、管理应用的工具 一、安装docker 参考Install Docker Engine on Ubuntu | Docker Docs 二、快速入门 1、镜像和容器 docker镜像可以做到忽略操作系统的差异&#xff0c;跨平台运行&#xff0c;忽略安装的差异 当我们利用Docker安装应用时&#xff0c;Dock…

有效防止CDN网站被溯源ip的教程

如何反溯源隐藏自己的源IP防止溯源&#xff1f; 还有些大牛会进行渗透攻击、CC攻击&#xff0c;溯源打服务器&#xff0c;各式各样的&#xff0c;防不胜防。所以很多站长套起了cdn&#xff0c;比起cdn提供的加速效果&#xff0c;更多的站长可能还是为了保护那可怜弱小的源站ip…

FolkMQ v1.2 开源消息中间件(添加事务消息)

简介 采用 “单线程” “多路复用” “内存运行” “快照持久化” “Broker 集群模式”&#xff08;可选&#xff09;基于 Socket.D 网络应用协议 开发。全新设计&#xff0c;自主架构&#xff01; 角色功能生产端发布消息、定时消息、顺序消息、可过期消息、事务消息。发…