leetcode-5-最长回文串

题目描述

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

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

示例 1:

输入:s = "babad"

输出:"bab"

解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"

输出:"bb"

提示:

1 <= s.length <= 1000

s 仅由数字和英文字母组成

解题思路

要找到最长的回文子串,可以使用动态规划或中心扩展两种方法来解决。下面我将分别介绍这两种方法的思想,并提供使用Scala编写的示例代码。

动态规划方法:

动态规划的思想是利用已知的子问题的解来求解更大规模的问题的解。在这个问题中,我们可以使用一个二维数组 dp,其中 dp(i)(j) 表示从索引 i 到索引 j 的子串是否为回文串。状态转移方程如下:

复制代码
dp(i)(j) = dp(i+1)(j-1) && s(i) == s(j)

在更新 dp 数组的过程中,需要注意边界条件和更新顺序。

中心扩展方法:

中心扩展的思想是以每个字符或两个字符之间的空隙作为回文串的中心,然后向两边扩展来判断是否为回文串。具体步骤如下:

  • 从左到右遍历每个字符,以当前字符为中心向两边扩展,找到以当前字符为中心的最长回文子串。
  • 从左到右遍历每两个相邻字符之间的空隙,以空隙为中心向两边扩展,找到以空隙为中心的最长回文子串。

使用以上两种方法中的任何一种都可以解决这个问题。下面是使用Scala编写的示例代码,演示了动态规划方法的实现:

scala 复制代码
object Solution {
  def longestPalindrome(s: String): String = {
    val n = s.length
    var start = 0
    var maxLength = 1
    val dp = Array.ofDim[Boolean](n, n)

    for (i <- 0 until n)
      dp(i)(i) = true

    for (length <- 2 to n) {
      for (i <- 0 until n - length + 1) {
        val j = i + length - 1
        if (s(i) == s(j)) {
          if (length == 2 || dp(i + 1)(j - 1)) {
            dp(i)(j) = true
            if (length > maxLength) {
              maxLength = length
              start = i
            }
          }
        }
      }
    }

    s.substring(start, start + maxLength)
  }

  def main(args: Array[String]): Unit = {
    val s1 = "babad"
    val s2 = "cbbd"
    println(longestPalindrome(s1))  // Output: "bab"
    println(longestPalindrome(s2))  // Output: "bb"
  }
}
相关推荐
2601_958352906 小时前
还要写 AEC 算法?0 代码 + 6 个引脚,F-18 让通话清晰度提升 300%
人工智能·算法·降噪消回音
happyprince6 小时前
03-regmix-深刻观-哲学与升华
算法
一路向阳~负责的男人6 小时前
运动控制算法收录
算法
czt_java6 小时前
5个核心位运算公式
算法
Doubbbbbbble云7 小时前
区间合并问题的常见算法模式与优化思路4
java·数据结构·算法
David猪大卫7 小时前
【C++修炼】哈希表的实现
数据结构·c++·笔记·学习·算法·哈希算法·散列表
hahaha60168 小时前
HLS高层次综合设计技巧--数组
开发语言·嵌入式硬件·算法·fpga开发
不会就选b8 小时前
算法日常・每日刷题--<贪心>10
算法
南京兴帝文化传媒有限公司8 小时前
本地生活服务商户GEO优化技术实践:AI大模型收录机制与地图POI权重算法拆解
大数据·人工智能·算法·生活·geo优化实操·csdn运营技巧·ai内容收录
linx2959 小时前
单元九 · 零基础路线图-第 7–9 周·类与 RAII
c语言·开发语言·数据结构·c++·嵌入式硬件·算法