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"
  }
}
相关推荐
谎言西西里1 小时前
LeetCode 热题100 --- 双指针专区
算法
leo__5204 小时前
基于两步成像算法的聚束模式SAR MATLAB实现
开发语言·算法·matlab
前端小白在前进5 小时前
力扣刷题:在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·leetcode
某林2126 小时前
基于SLAM Toolbox的移动机器人激光建图算法原理与工程实现
stm32·嵌入式硬件·算法·slam
修炼地6 小时前
代码随想录算法训练营第四十三天 | 图论理论基础、深搜理论基础、卡码网98. 所有可达路径、797. 所有可能的路径、广搜理论基础
算法·深度优先·图论
iAkuya6 小时前
(leetcode)力扣100 23反转链表(迭代||递归)
算法·leetcode·链表
剪一朵云爱着6 小时前
PAT 1095 Cars on Campus
算法·pat考试
FreeBuf_7 小时前
朝鲜黑客组织“传染性面试“瞄准macOS:新型“DriverFixer“窃密工具浮出水面
macos·面试·职场和发展
牛客企业服务7 小时前
AI面试实用性解析:不是“能不能用”,而是“怎么用好”
人工智能·面试·职场和发展
MicroTech20257 小时前
激光点云快速配准算法创新突破,MLGO微算法科技发布革命性点云配准算法技术
人工智能·科技·算法