第五题:最长回文子串(Longest Palindromic Substring)

题目描述:

给定一个字符串 s,找到 s 中最长的回文子串。

示例:

  1. 输入:s = "babad"
    输出:"bab" 或 "aba"

  2. 输入:s = "cbbd"
    输出:"bb"

要求: 你需要找出 s 中的最长回文子串。

解题思路

方法1:中心扩展法

回文字符串的特点是对称的,因此我们可以从每个字符(或字符间隙)作为中心,向两边扩展来找到回文子串。

  1. 遍历每个字符:对于字符串中的每个字符,尝试以该字符作为回文的中心进行扩展,检查最长回文子串。

  2. 扩展中心

    • 对于每个字符,尝试以其为中心,分别考虑回文长度为奇数和偶数的情况。
    • 对于奇数长度回文,以字符本身为中心进行扩展。
    • 对于偶数长度回文,以字符和其下一个字符之间的位置为中心进行扩展。
  3. 更新最长回文子串:在扩展过程中,更新记录当前找到的最长回文子串的起始位置和长度。

C 语言实现

#include <stdio.h>
#include <string.h>char* longestPalindrome(char* s) {int n = strlen(s);if (n == 0) return "";int start = 0, maxLen = 1;// Helper function to expand around centervoid expandAroundCenter(int left, int right) {while (left >= 0 && right < n && s[left] == s[right]) {if (right - left + 1 > maxLen) {start = left;maxLen = right - left + 1;}left--;right++;}}for (int i = 0; i < n; i++) {expandAroundCenter(i, i); // Odd length palindromesexpandAroundCenter(i, i + 1); // Even length palindromes}char* result = (char*)malloc((maxLen + 1) * sizeof(char));strncpy(result, s + start, maxLen);result[maxLen] = '\0';return result;
}

Java 实现

public class Solution {public String longestPalindrome(String s) {if (s == null || s.length() == 0) return "";int start = 0, maxLen = 1;// Helper function to expand around centerString expandAroundCenter(String s, int left, int right) {while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {left--;right++;}return s.substring(left + 1, right);}for (int i = 0; i < s.length(); i++) {String oddLenPalindrome = expandAroundCenter(s, i, i);String evenLenPalindrome = expandAroundCenter(s, i, i + 1);String longerPalindrome = oddLenPalindrome.length() > evenLenPalindrome.length() ? oddLenPalindrome : evenLenPalindrome;if (longerPalindrome.length() > maxLen) {maxLen = longerPalindrome.length();start = s.indexOf(longerPalindrome);}}return s.substring(start, start + maxLen);}
}

Python 实现

def longestPalindrome(s: str) -> str:def expandAroundCenter(left: int, right: int) -> str:while left >= 0 and right < len(s) and s[left] == s[right]:left -= 1right += 1return s[left + 1:right]if not s:return ""start, max_len = 0, 1for i in range(len(s)):# Odd length palindromespal1 = expandAroundCenter(i, i)# Even length palindromespal2 = expandAroundCenter(i, i + 1)# Determine the longer palindromelonger_pal = pal1 if len(pal1) > len(pal2) else pal2if len(longer_pal) > max_len:start = i - (len(longer_pal) - 1) // 2max_len = len(longer_pal)return s[start:start + max_len]

时间复杂度

时间复杂度: 所有这些实现方法的时间复杂度为 (O(n^2)),其中 (n) 是字符串 s 的长度。虽然扩展中心的过程对于每个字符都需要进行最多 (O(n)) 次操作,但由于要遍历每个字符,所以总体复杂度是 (O(n^2))。

空间复杂度: 每个实现的空间复杂度为 (O(1)) 除了输出空间(用于存储回文子串)。

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

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

相关文章

开源接口自动化测试工具AutoMeter

AutoMeter是一款针对分布式服务和微服务API做功能和性能一体化的自动化测试平台。一站式提供项目管理&#xff0c;微服务&#xff0c;API接口&#xff0c;用例&#xff0c;环境管理&#xff0c;测试管理&#xff0c;前置条件&#xff0c;测试集合&#xff0c;变量管理&#xff…

【芯片设计- RTL 数字逻辑设计入门 9.4 -- Power Gating 在SoC 芯片电源完整性中的详细介绍】

文章目录 电源完整性简介电源完整性重要性电源完整性主要问题电源完整性问题优化什么是Power Gating?Power Gating的优势与挑战浪涌电流的产生与影响设计中的折中与优化电源完整性简介 电源完整性(Power Integrity, PI)是指在系统级设计中,确保电源分配网络(Power Distri…

kali安装

引言 Kali Linux 是一个基于 Debian 的 Linux 发行版&#xff0c;专门为渗透测试和安全审计而设计。它包含了大量的安全工具&#xff0c;如 Wireshark、Nmap、Metasploit 等&#xff0c;这些工具可以帮助安全专家和研究人员进行网络安全评估、漏洞检测和渗透测试。Kali Linux …

系统架构师(每日一练23)

每日一练 1.软件活动主要包括软件描述、()、软件有效性验证和()&#xff0c;()定义了软件功能及使用限制。答案与解析 问题1 A.软件模型 B.软件需求 C.软件分析 D.软件开发 问题2 A.软件分析 B.软件测试 C.软件演化 D.软件开发 问题3 A.软件分析 B.软件测试 C.软件描述 D.软…

进阶-5.锁

锁 1.概述2.全局锁3.表级锁3.1 介绍3.2 表锁3.3 元数据锁3.4意向锁 4.行级锁 1.概述 分类 按锁的粒度分类&#xff1a; 全局锁&#xff1a;锁住数据库中所有表表级锁&#xff1a;每次操作锁定整张表行级锁&#xff1a;每次操作锁定对应的行数据 2.全局锁 介绍 全局锁就是对…

第N11周:seq2seq翻译实战-Pytorch复现

任务&#xff1a; ●为解码器添加上注意力机制 一、前期准备工作 from __future__ import unicode_literals, print_function, division from io import open import unicodedata import string import re import randomimport torch import torch.nn as nn from torch impor…

Python中的变量:作用域与生命周期的秘密探索

引言 在编程的世界里&#xff0c;变量如同舞台上的演员&#xff0c;它们有着自己的“角色”——存储数据&#xff0c;也有着特定的“登场”和“退场”时刻&#xff0c;即作用域和生命周期。理解这些概念对于编写高效、可维护的代码至关重要。本文将带你一起探索Python中变量的…

一款好看的WordPress REST API 主题

介绍&#xff1a; 主题特色&#xff1a; 使用Nuxtjs WordPress Rest Api 实现前后端分离&#xff0c;可完成多端部署&#xff1b; 主题支持自动切换黑夜模式。 使用说明&#xff1a; service 目录为wordpress主题文件&#xff0c;需要拷贝到wordpress主题目录下&#xff0…

cmake install 区分Debug和Relase

需求&#xff1a; 在vs下界面运行install命令需要将生成的程序按relase和Debug安装到指定目录。 实现&#xff1a; 配置如下cmake set(CMAKE_INSTALL_PREFIX ${PUBLISH_DIR}) message(STATUS "PUBLISH_DIR dir:${PUBLISH_DIR}") install(TARGETS ${TARGET_NAME}…

记录一次经历:使用flask_sqlalchemy集成flask造成循环导入问题

前言&#xff1a; 工作需求&#xff0c;写一个接口&#xff0c;用Python来编写&#xff0c;我首先想到用flask小型框架来支撑&#xff0c;配置sqlalchemy来实现&#xff0c;但是在实现的过程中&#xff0c;发生循环导入问题 我想到用蓝图来解决此问题&#xff0c;但是仍然会出死…

基于PHP的文件上传

文件上传是现代网络应用中不可或缺的功能&#xff0c;它允许用户将本地文件存储到服务器上&#xff0c;用于后续的处理、分发或备份。 一、基于前端验证的文件上传 文件上传漏洞中的前端验证漏洞是一个常见且危险的问题。这类漏洞的产生主要是因为前端验证机制可以通过多种方…

设置虚拟机使用主机以太网而不是WiF连接

虚拟机使用主机的以太网连接而不是Wi-Fi连接&#xff0c;可以通过在虚拟化软件中配置虚拟机的网络设置来实现。以下是一些常见的虚拟化软件&#xff08;如VMware和VirtualBox&#xff09;中设置虚拟机网络以使用以太网连接的步骤&#xff1a; 一、VMware中设置 1、打开虚拟网…

微信小程序:点击事件(bindtap)传递参数

小程序在组件上绑定事件后&#xff0c;传递参数的方式不同于前端其他场景中直接加参数的方式&#xff0c;小程序在参数的传递时&#xff0c;采用事件对象的自定义属性的方式&#xff0c;具体实现如下&#xff1a; wxml&#xff1a; <view bindtap"goIndex" data…

JAVA双端队列Deque详解

Java中的双端队列&#xff08;Deque, 全称是double-ended queue&#xff09;是一种具有队列和栈的性质的抽象数据类型。双端队列中的元素可以从两端弹出&#xff08;在队列的头部和尾部进行添加或删除操作&#xff09;&#xff0c;因此它既可以作为FIFO&#xff08;先进先出&am…

天猫 登录滑块 淘系滑块分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关 前言 玩了几天现在才有空研究轨迹直接用了之前的…

UEditor百度富文本后端上传文件接口

UEditor百度富文本后端上传文件接口 直接上代码 接口&#xff1a; RequestMapping("/UEditorConfig")public String list(HttpServletRequest request, HttpServletResponse response) throws IOException {String config environment.getProperty("ueditor.c…

SOMEIP_ETS_059: ResetInterface_wrong_Fire_and_forget_package_get_No_Error_back

测试目的&#xff1a; 验证设备&#xff08;DUT&#xff09;在接收到一个错误的Fire&Forget消息时&#xff0c;不会做出响应或发送错误消息。 描述 本测试用例旨在检查DUT在接收到使用无效接口版本的方法resetInterface的Fire&Forget消息时&#xff0c;是否不会回应…

React 入门第四天:理解React中的路由与导航

在React学习的第四天&#xff0c;我将目光聚焦在React Router上。路由是任何单页应用&#xff08;SPA&#xff09;的核心部分&#xff0c;决定了用户如何在应用中导航&#xff0c;以及不同URL对应的内容如何渲染。通过学习React Router&#xff0c;我体会到了React处理路由的强…

数据库里的幽灵数据 - SQLite WAL模式探秘

亲爱的开发者朋友们,你是否曾经遇到过这样一个令人困惑的场景:你辛辛苦苦地往数据库里插入了新数据,信心满满地打开数据库文件一看,结果却发现新数据仿佛人间蒸发了一般?不要慌,这篇文章将为你揭开这个神秘现象的面纱。 让我们从一个真实的故事开始。 小明是一个移动应用开发…

打卡学习Python爬虫第五天|Xpath解析的使用

什么是Xpath&#xff1f;是在XML文档中搜索内容的一门语言&#xff0c;HTML可以看作是xml的一个子集。 目录 1、安装lxml模块 2、导入lxml中的etree子模块 3、Xpath使用方法 3.1.选择节点 3.2.选择属性 3.3.选择文本内容 3.4.使用通配符*过滤节点 3.5.使用中括号[]索引…