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

03-最长回文子串

题目描述

给定一个字符串S,请你求出S的最长回文子串。

输入描述

输入仅一行,包含一个字符串S。

1≤∣S∣≤5×1051≤∣S∣≤5×105,保证S只包含小写字母、大写字母、数字。

输出描述

输出共1行,包含一个整数,表示答案。

输入输出样例

输入

aa1ABA1b

输出

5

思路分析:

对于求字符串的最长回文子串,可以使用中心扩展法

回文串分为奇数长度和偶数长度两种情况:

对于奇数长度的回文串,中心是一个字符;对于偶数长度的回文串,中心是两个字符。

从字符串的每个位置开始,分别向左右两边扩展,检查是否构成回文串,并记录最长的回文子串。

代码示例: 

s=input()
max_palindrome=""

# 中心扩展函数,用于检查以left和right为中心的回文子串aa11b b11aa
def expand(left, right):
    # 当left和right在字符串范围内且对应位置的字符相等时,继续扩展
    while left >= 0 and right < len(s) and s[left] == s[right]:
        left -= 1
        right += 1
    # 返回以left和right为中心的回文子串(不包括left和right超出范围的部分)
    return s[left + 1:right]
# 遍历字符串的每个位置
for i in range(len(s)):
    # 检查奇数长度的回文子串
    odd_palindrome = expand(i, i)
    # 如果当前奇数长度的回文子串比之前找到的最长回文子串长,则更新最长回文子串
    if len(odd_palindrome) > len(max_palindrome):
        max_palindrome = odd_palindrome
    # 检查偶数长度的回文子串(以i和i+1为中心)
    even_palindrome = expand(i, i + 1)
    # 如果当前偶数长度的回文子串比之前找到的最长回文子串长,则更新最长回文子串
    if len(even_palindrome) > len(max_palindrome):
        max_palindrome = even_palindrome

# 输出最长回文子串长度
print(len(max_palindrome))


http://www.kler.cn/a/509167.html

相关文章:

  • SpringBoot错误码国际化
  • Vulnhub-Tr0ll靶机笔记
  • USB 驱动开发 --- Gadget 驱动框架梳理(一)
  • 差分(前缀和的逆运算)
  • riscv架构下linux4.15实现early打印
  • K8S集群常用命令
  • 创建NFS共享目录
  • day25_HTML
  • Linux下扫描SMB及445漏洞的实用命令与工具详解
  • Windows下的C++内存泄漏检测工具Visual Leak Detector (VLD)介绍及使用
  • mysql打开报错fail to connecto to mysql at 127.0.0.1:3306 with user root
  • Ei Scopus双检索 | 2025年第五届机器人与人工智能国际会议(JCRAI 2025)
  • 前端——Html+CSS
  • Chrome谷歌浏览器如何能恢复到之前的旧版本
  • 防止 SQL 注入的技术文档
  • C#枚举类型携带额外数据的方法
  • 正点原子repo放到自己的git服务器
  • 第k小(经典Top k问题)
  • springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice
  • Vector的模拟实现与迭代器失效问题
  • 什么是SSL及SSL的工作流程
  • 线性表代码实战
  • 开发完全开源的AI会议助手:提升会议效率
  • STM32的DMA作用
  • Ubuntu20.04安装mysql9.0.1,并且修改数据文件路径
  • 【C++】哈希表的使用